2017-06-30 18 views
0

イメージ内のユーザーにタグを付けて保存したい場合、イメージ内に複数のユーザーをタグ付けできるため、ネストされたシリアライザを使用しました。 問題は、画像がタグなしで保存されていることです(タグなし)。ここ はコードです: models.pyDjangoネストされたシリアライザが期待どおりに保存されない

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

ネストされたオブジェクトを保存するには、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で書き込み可能なネストされたシリアル化についての詳細を見つけることができます。

+0

問題はtagがvalidated_dataにありません!ユーザーと画像のみが検索されます。 – Engineer

+0

@Engineerはタグソースを 'tag'または' tag_set'として設定しようとします: 'tag = UsernameTagSerializer(source = 'tag'、read_only = True、many = True)' – neverwalkaloner

関連する問題