1
我有一個叫做UserProfile
的模型,它是一個OneToOneField
到默認的User
模型。我有一個Post
型號,其User
爲ManyToManyField
。我無法爲Post
編寫一個序列化程序,其中包括User
作爲響應。如何序列化Django的Rest框架中有多到多的字段
我UserProfile
型號:
class UserProfile(models.Model):
user = models.OneToOneField(User)
name = models.CharField(max_length=255, null=True)
profile_picture = models.CharField(max_length=1000, null=True)
我Post
型號:
class Post(models.Model):
text = models.TextField(null=True)
title = models.CharField(max_length=255, null=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
user = models.ManyToManyField(User)
我Post
串行:
class PostSerializer(serializers.ModelSerializer):
users = UserProfileSerializer(source='user.userprofile', many=True)
class Meta:
model = Post
fields = ('id', 'text', 'title', 'users')
隨着上述串行我收到以下錯誤:
Got AttributeError when attempting to get a value for field `users` on serializer `WorkSerializer`.
The serializer field might be named incorrectly and not match any attribute or key on the `Work` instance.
Original exception text was: 'ManyRelatedManager' object has no attribute 'userprofile'.
編輯:我創建了另一個串行UserSerializerForPost
這是在PostSerializer
使用:
class UserSerializerForPost(serializers.ModelSerializer):
user = UserProfileSerializer(source='userprofile')
class Meta:
model = User
fields = ('user',)
class PostSerializer(serializers.ModelSerializer):
users = UserSerializerForPost(source='user', many=True)
class Meta:
model = Post
fields = ('id', 'text', 'title', 'users')
雖然這工作,但我正在逐漸在user
字典UserProfile
響應爲users
列表:
"users": [
{
"user": {
"id": 2,
...
},
{
"user": {
"id": 4,
...
}
}
]
但我想:
"users": [
{
"id": 2,
...
},
{
"id": 4,
...
}
}
],
這是因爲您正在'UserSerializerForPost'序列化程序中定義'user'字段。刪除該字段。 – Gocht
沒有定義它如何提供'源'? – avi
你只需要在你的Meta類中定義一個模型。 – Gocht