我使用django的rest框架來顯示有關用戶的信息。每個用戶都有一些保存在UserProfile中的聯繫人(用戶配置文件使用一對一關係)。可以直接在用戶模型中訪問聯繫人(user.contacts
)。
我想顯示用戶的所有聯繫人的名稱(和URL)。我寫了下面串行:Django Rest Framework - 嵌套用戶中的用戶配置文件
class ContactsUserSerializer(serializers.ModelSerializer):
class Meta:
model = get_user_model()
fields = ("username", "email")
class ContactsSerializer(serializers.ModelSerializer):
# user = ContactsUserSerializer(many=True) # raises TypeError: 'User' object is not iterable
class Meta:
model = UserProfile
fields = ("user",)
class UserSerializer(serializers.HyperlinkedModelSerializer):
contacts = ContactsSerializer(many=True)
class Meta:
model = get_user_model()
fields = ("url", "username", "email", "contacts")
其返回
{
"url": "http:\/\/localhost:8080\/users\/1\/",
"username": "test1",
"email": "",
"contacts": [
{
"user": 2
},
{
"user": 1
}
]
}
,但我希望它是:
{
"url": "http:\/\/localhost:8080\/users\/1\/",
"username": "test1",
"email": "",
"contacts": [
{
"url": "http://link_to_user",
"username": "foo"
},
{
"url": "http://link_to_user",
"username": "bar"
}
]
}
我怎樣才能做到這一點?我已經嘗試爲聯繫人用戶添加另一個序列化程序,但引發了類型錯誤:'用戶'對象不可迭代,JSON結構看起來有點尷尬:{contacts:[user:{「username:... },]},如果他對Django的User Profile沒有信心,這可能會讓API的用戶感到困惑。
完美工作,但它應該是'HyperlinkedRelatedField'(或'HyperlinkedIdentityField')而不是'HyperlinkedModelSerializer'! – Matt3o12 2014-08-30 09:02:26