Python 序列化程序删除Django 3.1中的一对多关系

Python 序列化程序删除Django 3.1中的一对多关系,python,django,django-serializer,Python,Django,Django Serializer,当我尝试将照片附加到宠物时,序列化程序正在删除附件,我得到的是附件:[“此字段是必需的”]。我的代码: models.py class Pet(models.Model): pet_id = models.UUIDField('pet uid',default=uuid.uuid4,null=False,primary_key=True,blank=False,editable=False, unique=True) name = models.CharField('Pet na

当我尝试将照片附加到宠物时,序列化程序正在删除附件,我得到的是
附件:[“此字段是必需的”]
。我的代码:

models.py

class Pet(models.Model):
   pet_id = models.UUIDField('pet uid',default=uuid.uuid4,null=False,primary_key=True,blank=False,editable=False, unique=True)  
   name = models.CharField('Pet name', max_length=255, null=False, blank=False)

class Attachment(models.Model):
    attachment_id = models.UUIDField('attachment uid',default=uuid.uuid4,null=False,primary_key=True,blank=False,editable=False, unique=True)       
    pet_id = models.ForeignKey(Pet, on_delete=models.CASCADE)
    name = models.FileField(upload_to='photos/', null=False, blank=False)
    upload_at = models.DateTimeField('Time it was uploaded', max_length=50, null=False, blank=False )
序列化程序.py

class AttachmentSerializer(serializers.ModelSerializer):    
    class Meta:
        model = Attachment
        fields = ('name','upload_at')

class PetSerializer(serializers.ModelSerializer):
    attachment = AttachmentSerializer(source='attachment_set', many=True)
    class Meta: 
        model = Pet
        fields = ('pet_id','name', 'attachment')
    
    # because this: 
    # https://www.django-rest-framework.org/api-guide/relations/#writable-nested-serializers
    def create(self, validated_data):
        attachments = validated_data.pop('attachment')
        pet = Pet.objects.create(**validated_data)
        for att in attachments:
            Attachment.objects.create(pet_id=pet.pet_id, **att)
        return pet
views.py

def create_pet(self, request):      
    serializer = self.get_serializer(data=request.data)         
    if not serializer.is_valid():
       return Response({'error':serializer.errors,status=status.HTTP_400_BAD_REQUEST)

    serializer.save()

    return Response({'data':serializer.validated_data}, status=status.HTTP_201_CREATED) 

    
如果启用
PetSerializer
I do
attachment=AttachmentSerializer(many=True,source=attachment\u set',required=False)
附件没有问题,但我需要附件

此外,我已在
附件的models.py中完成
pet\u id=models.ForeignKey(pet,related\u name='attachments',on\u delete=models.CASCADE)
和序列化程序
PetSerializer

class PetSerializer(serializers.ModelSerializer):
    class Meta: 
        model = Pet
        fields = ('pet_id','name', 'attachments')

    # because this: 
    # https://www.django-rest-framework.org/api-guide/relations/#writable-nested-serializers
    def create(self, validated_data):
        attachments = validated_data.pop('attachment')
        pet = Pet.objects.create(**validated_data)
        for att in attachments:
            Attachment.objects.create(pet_id=pet.pet_id, **att)
        return pet
但我也犯了同样的错误。 此外,我已经检查了
请求的内容。数据和附件都在那里


有什么想法吗?提前感谢

解决方案是,在序列化程序上将此
附件=AttachmentSerializer(source='attachment_set',many=True)
更改为
附件=serializers.ListField(child=AttachmentSerializer(many=True))
并在创建方法中添加
附件=attachments[0]
。更新代码:

class PetSerializer(serializers.ModelSerializer):
    attachment = serializers.ListField(child=AttachmentSerializer(many=True))
    class Meta: 
        model = Pet
        fields = ('pet_id','name', 'attachment')
    
    # because this: 
    # https://www.django-rest-framework.org/api-guide/relations/#writable-nested-serializers
    def create(self, validated_data):
        attachments = validated_data.pop('attachment')
        pet = Pet.objects.create(**validated_data)
        attachments = attachments[0] # Extract the list inside the list
        for att in attachments:
            Attachment.objects.create(pet_id=pet.pet_id, **att)
        return pet