Django嵌套序列化程序没有按预期保存

时间:2017-06-30 15:00:48

标签: python django serialization django-rest-framework

我想在图像中标记用户并保存它,我使用嵌套的序列化程序,因为您可以在图像中标记多个用户。 问题是图像是在没有标签的情况下保存的(它们都没有)。 这是代码: models.py

class TagUsername(models.Model):
    # the tag is person
    tag = models.ManyToManyField(User, related_name='tag_username')
    image = models.ForeignKey(Image)

    # # De tection Rectangle specs(width,height, coordinate x & coordinate y)
    # width = models.FloatField()
    # length = models.FloatField()
    # xCoordinate = models.FloatField()
    # yCoordinate = models.FloatField()

    # who added this tag
    user = models.ForeignKey(User, on_delete=models.CASCADE)

serializers.py

class TagUsernameSerializer(serializers.ModelSerializer):
    tag = UsernameTagSerializer(read_only=True, many=True)
    user = serializers.SlugRelatedField(queryset=User.objects.all(), slug_field="username")
    image = serializers.CharField(source='image_id')

    class Meta:
        model = TagUsername
        fields = ('tag', 'user', 'image')

UsernameTagSerializer:

class UsernameTagSerializer(serializers.ModelSerializer):
    # username = serializers.SlugRelatedField(queryset=User.objects.all(), slug_field="username")

    class Meta:
        model = User
        # fields I want only
        fields = ('username', )

任何想法都错了!

1 个答案:

答案 0 :(得分:1)

您需要覆盖create方法来保存嵌套对象。试试这个:

def create(self, validated_data):
    tag_username = super().create(validated_data)
    for tag in validated_data['tag']:
        user = User.objects.get(username=tag['username']
        tag_username.tag.add(user) 
    return tag_username

您可以在docs中找到有关可写嵌套序列化的更多详细信息。