Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django DRF,在视图中更新对象后返回序列化数据_Django_Serialization_Django Rest Framework - Fatal编程技术网

Django DRF,在视图中更新对象后返回序列化数据

Django DRF,在视图中更新对象后返回序列化数据,django,serialization,django-rest-framework,Django,Serialization,Django Rest Framework,我有以下视图,其中包含可以发布或修补数据的自定义创建方法: 类月视图集(ModelViewSet): 身份验证\类=(令牌身份验证) def get_queryset(自我): #TODO:在前面设置Auth之前的解决方法。 query_set=Month.objects.all(),如果isinstance(self.request.user、AnonymousUser)\ else Month.objects.filter(farm\uu user=self.request.user) 返回

我有以下视图,其中包含可以发布或修补数据的自定义创建方法:

类月视图集(ModelViewSet):
身份验证\类=(令牌身份验证)
def get_queryset(自我):
#TODO:在前面设置Auth之前的解决方法。
query_set=Month.objects.all(),如果isinstance(self.request.user、AnonymousUser)\
else Month.objects.filter(farm\uu user=self.request.user)
返回查询集
序列化器_class=MonthSerializer
def创建(self、request、*args、**kwargs):
请求\月=请求.数据['month']
年份=请求。数据['year']
农场=请求。数据['farm']
天=请求。数据['days']
#TODO:了解为什么内置更新或创建在这里不起作用。
farm\u obj=farm.objects.get(id=farm)
尝试:
month=month.objects.get(年=年,月=请求\月,场=场\对象)
month.days=天
月。保存()
序列化器=月序列化器(数据=月,多个=假,部分=真)
serializer.is\u有效(raise\u exception=True)
返回响应(data=serializer.data,status=status.HTTP\u 200\u OK)
除月份外。DoesNotExist:
Month.objects.create(年=年,月=请求\月,农场=农场\对象,天=天)
返回响应(状态=status.HTTP\u 201\u已创建)`
现在,我的问题是在更新后发回对象的数据,更新成功,但在保存该对象并在响应中发回该对象后,我无法序列化该对象。当更新一个月的请求传入时,它会被更新,但响应为以下错误:

400
Error: Bad Request
[
  {
    "non_field_errors": [
      "Invalid data. Expected a dictionary, but got Month."
    ]
  }
]
我的序列化程序:

class MonthSerializer(serializers.ModelSerializer):
类元:
型号=月份
字段='\uuuu所有\uuuu'

请分享您的请求内容和型号

在Json请求中,我认为您正在尝试发送Month对象,但序列化程序正在等待dict

也许您的json请求应该是:


“月”:[{your month object}]

根据Arakkal Abu的回答,我可以通过执行以下操作来解决它

def创建(self、request、*args、**kwargs):
请求\月=请求.数据['month']
年份=请求。数据['year']
农场=请求。数据['farm']
天=请求。数据['days']
farm\u obj=farm.objects.get(id=farm)
尝试:
month=month.objects.get(年=年,月=请求\月,场=场\对象)
month.days=天
月。保存()
数据={'month':month.month,'year':month.year,'date':month.date,
“农场”:month.farm,“days”:month.days}
序列化程序=MonthSerializer(数据=数据,多个=False)
serializer.is\u有效(raise\u exception=True)
返回响应(data=serializer.data,status=status.HTTP\u 200\u OK)
除月份外。DoesNotExist:
month=month.objects.create(年=year,月=request\u月,farm=farm\u obj,天=days)
数据={'month':month.month,'year':month.year,'date':month.date,
“农场”:month.farm,“days”:month.days}
序列化程序=MonthSerializer(数据=数据)
serializer.is\u有效(raise\u exception=True)
返回响应(data=serializer.data,status=status.HTTP\u 201\u已创建)

此代码有效,但对我来说似乎很奇怪。

MonthSerializer中的问题(数据=月…)DRF希望在
数据中有一个类似dict的对象argument@ArakkalAbu包含像{'data':month}这样的对象的dict还是包含对象字段的dict?