如何获取与一对一字段相关的两个模型中的所有对象的列表

时间:2015-05-22 07:51:31

标签: python django django-models

我有一个客户档案模型如下

class UserProfile(models.Model):
    user = models.OneToOneField(User)
    address = models.CharField(max_length=200)

和auth用户模型。我希望所有用户对象的列表及其地址为json,如:

{
    //auth_user fields
    "username": "username",
    "first_name": "first_name",
    "last_name": "last_name", 
    "is_active": true, 
    "is_superuser": false, 
    ....
    ....
    //UserProfile fields
    address: "address"
}

通过serializers.serialize(User.objects.all())我只能获得身份验证用户数据。如何使用用户数据获取关联的配置文件数据?

2 个答案:

答案 0 :(得分:0)

简单的方法是单独序列化每个模型。除此之外,如果你真的需要为两个模型返回单个记录的json,你可以手动(例如通过迭代)从模型中构建一个字典列表,然后使用json.dumps代替Django序列化器: / p>

import json
# ...

r = []
for user in User.objects.all():
    r.append({
        'username': user.username,
        # ....
        'address': user.userprofile.address
    })

 my_json = json.dumps(r)

Haven没有对此进行过测试,但我希望你明白这一点。

答案 1 :(得分:0)

要获得嵌套对象序列化,您可以使用django-rest-framework的一部分 - http://www.django-rest-framework.org/api-guide/relations/

class UserProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = Track

class UserSerializer(serializers.ModelSerializer)
    userprofile = UserProfileSerializer(many=False)

    class Meta:
        model = User

serializer = UserSerializer(user)
print(serializer.data)