Django Rest Framework-序列化后获取模型实例

Jud*_*ing 3 python django django-rest-framework

我做了一个序列化程序,并且Booking在验证POST数据之后,尝试从序列化程序中的booking字段创建一个实例。但是,由于Booking对象具有外键,因此出现错误:

ValueError:无法分配“ 4”:“ Booking.activity”必须是“ Activity”实例。

这是我的视图功能:

@api_view(['POST'])
def customer_charge(request):
    serializer = ChargeCustomerRequestSerializer(data=request.data)
    serializer.is_valid(raise_exception=True)

    # trying to create an instance using the ReturnDict from the serializer
    booking = Booking(**serializer.data['booking'])
    booking.save()
Run Code Online (Sandbox Code Playgroud)

Serializers.py,其中BookingSerializer是ModelSerializer

class ChargeCustomerRequestSerializer(serializers.Serializer):
    booking = BookingSerializer()
    customer = serializers.CharField(max_length=255)

class BookingSerializer(serializers.ModelSerializer):
    class Meta:
        model = Booking
        fields = '__all__'
        # I wanted to view the instances with the nested information available
        # but this breaks the serializer validation if it's just given a foreign key
        # depth = 1
Run Code Online (Sandbox Code Playgroud)

从嵌套序列化器创建模型实例的正确方法是什么?

Jud*_*ing 7

serializer.validated_data 应该使用,而不是 serializer.data

  • 但这并没有给出实例。 (5认同)

小智 5

model_obj = serializer.save()
Run Code Online (Sandbox Code Playgroud)

model_obj保存模型实例,您可以相应地执行操作。或者您可以编写create()update()在官方文档中提到的方法

反序列化对象:

https://www.django-rest-framework.org/api-guide/serializers/#deserializing-objects