【发布时间】:2017-05-09 13:41:18
【问题描述】:
我想知道解决这个问题的最佳方法是什么,我有一个这样的嵌套序列化程序:
serializers.py:
class PaymentMethodSerializer(serializers.ModelSerializer):
data = serializers.JSONField()
payment_type = PaymentTypeSerializer(required=False)
然后,视图看起来像这样:
class PaymentMethodView(APIView):
def put(self, request, id):
try:
payment_method = PaymentMethod.objects.get(id=id)
except ObjectDoesNotExist:
return Response("No PaymentMethod with that id", status=status.HTTP_404_NOT_FOUND)
payment_method_serialized = PaymentMethodSerializer(instance=payment_method, data=request.data)
payment_type = request.data.get("payment_type", None)
if payment_type:
try:
payment_method_type = PaymentType.objects.get(id=payment_type)
except ObjectDoesNotExist:
payment_method_type = None
else:
payment_method_type = None
# Now, call is_valid()
if payment_method_serialized.is_valid():
payment_method_serialized.save(payment_type=payment_method_type)
return Response(payment_method_serialized.data, status=status.HTTP_200_OK)
is_valid() 返回 False 并且此错误:
{"payment_type":{"non_field_errors":["Invalid data. Expected a dictionary, but got int."]}}
我明白了,我给序列化器一个pk。但是我不想创建一个带有PrimaryKeyRelatedField 的新序列化程序,而不是仅仅为此创建一个嵌套关系。如何获得与 pk 对应的 PaymentType,然后将该对象添加到 request.data 字典中,以便 is_valid 不会失败?这是解决这个问题的最佳方法吗?
【问题讨论】:
标签: django django-rest-framework