我使用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