簡體   English   中英

如何在 drf 序列化程序中創建模型實例

[英]how to create model instance in drf serializers

我是 DRF 的新手。 我想保存模型。

在models.py中, PackageDetailsPhysicalDetailMember有外鍵關系

我的 serializers.py 如下:

from rest_framework import serializers
from .models import Member, PackageDetails, PhysicalDetail



class PackageDetailsSerializer(serializers.ModelSerializer):
    is_expired = serializers.SerializerMethodField()
    members_expiry_date = serializers.SerializerMethodField()


    class Meta:
        model = PackageDetails  
        exclude = ['id']
        extra_fields = ['is_expired', 'members_expiry_date']

    def get_is_expired(self, instance):
        return instance.is_expired


    def get_members_expiry_date(self, instance):
        return instance.members_expiry_date



class PhysicalDetailSerializer(serializers.ModelSerializer):
    class Meta:
        model = PhysicalDetail
        exclude = ['id']



class MemberSerializer(serializers.ModelSerializer):
    physical_details = PhysicalDetailSerializer(many=True)
    package_details = PackageDetailsSerializer(many=True)


    class Meta:
        model = Member
        fields = '__all__'
        extra_fields = ['physical_details', 'package_details']

    def create(self, validated_data):
        physical_detail_data = validated_data.pop("physical_details")
        package_detail_data = validated_data.pop("package_details")

        member = Member.objects.create(**validated_data)
        PhysicalDetail.objects.create(member=member, **physical_detail_data)
        PackageDetails.objects.create(member=member, **package_detail_data)
        return member

視圖.py:

class MemberViewset(viewsets.ModelViewSet):
    queryset = Member.objects.all()
    serializer_class = MemberSerializer

class PackageDetailViewset(viewsets.ModelViewSet):
    queryset = PackageDetails.objects.all()
    serializer_class = PackageDetailsSerializer


class PhysicalDetailViewset(viewsets.ModelViewSet):
    queryset = PhysicalDetail.objects.all()
    serializer_class = PhysicalDetailSerializer

在 GET 請求中它運行良好.. 但在具有相同 json 格式的 POST 請求中,它響應以下內容:

{
"physical_details": [
    "This field is required."
],
"package_details": [
    "This field is required."
]
}

我已經提供了這些字段..那么為什么會發生這種情況..

您使用pop()從 dict 中刪除了那些

pop() 方法從具有給定鍵的字典中刪除並返回一個元素。

嘗試使用get()代替

如果鍵在字典中,get() 方法返回指定鍵的值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM