【发布时间】:2020-07-29 08:43:24
【问题描述】:
我有以下视图以及可以发布或修补数据的自定义创建方法:
class MonthsViewSet(ModelViewSet):
authentication_classes = (TokenAuthentication,)
def get_queryset(self):
# TODO: Workaround until Auth is setup on the front.
query_set = Month.objects.all() if isinstance(self.request.user, AnonymousUser) \
else Month.objects.filter(farm__user=self.request.user)
return query_set
serializer_class = MonthSerializer
def create(self, request, *args, **kwargs):
request_month = request.data['month']
year = request.data['year']
farm = request.data['farm']
days = request.data['days']
# TODO: understand why built-in update_or_create didn't work here.
farm_obj = Farm.objects.get(id=farm)
try:
month = Month.objects.get(year=year, month=request_month, farm=farm_obj)
month.days = days
month.save()
serializer = MonthSerializer(data=month, many=False, partial=True)
serializer.is_valid(raise_exception=True)
return Response(data=serializer.data, status=status.HTTP_200_OK)
except Month.DoesNotExist:
Month.objects.create(year=year, month=request_month, farm=farm_obj, days=days)
return Response(status=status.HTTP_201_CREATED)`
现在我的问题是更新后发回对象的数据,更新成功但我无法序列化该对象后保存并在请求更新一个月时将其发送回响应中,它得到更新但响应是这个错误:
400
Error: Bad Request
[
{
"non_field_errors": [
"Invalid data. Expected a dictionary, but got Month."
]
}
]
我的序列化器:
class MonthSerializer(serializers.ModelSerializer):
class Meta:
model = Month
fields = '__all__'
【问题讨论】:
-
MonthSerializer(data=month,....)DRF 中的问题在data参数中需要一个类似字典的对象 -
@ArakkalAbu 包含 {'data':month} 等对象的字典还是包含对象字段的字典?
标签: django serialization django-rest-framework