我想在图像中标记用户并保存它,我使用嵌套的序列化程序,因为您可以在图像中标记多个用户。 问题是图像是在没有标签的情况下保存的(它们都没有)。 这是代码: 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', )
任何想法都错了!
答案 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中找到有关可写嵌套序列化的更多详细信息。