【发布时间】:2014-08-29 20:56:36
【问题描述】:
我正在使用 django 的 rest 框架来显示有关用户的信息。每个用户都有一些联系人保存在 UserProfile 中(用户配置文件使用一对一的关系)。可以直接在用户模型中访问联系人(user.contacts)。
我想显示用户的所有联系人的名称(和 URL)。我编写了以下序列化程序:
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"
}
]
}
我怎样才能做到这一点?我已经尝试为联系人用户添加另一个序列化程序,但这会引发类型错误:'User' object is not iterable 并且 JSON 结构看起来有点尴尬:{contacts: [ user: {"username": ... },]},如果 API 的用户对 Django 的用户配置文件没有信心,这可能会使他感到困惑。
【问题讨论】:
标签: django nested django-rest-framework