如何从与一对一字段相关的两个模型中获取所有对象的列表
How to get list of all objects from two models related with one to one field
我有一个客户档案模型如下
class UserProfile(models.Model):
user = models.OneToOneField(User)
address = models.CharField(max_length=200)
和一个授权用户模型。我想要所有用户对象的列表,其地址为 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())
我只能得到授权用户数据。如何获取关联的个人资料数据和用户数据?
简单的方法是分别序列化每个模型。除此之外,如果你真的需要 return json 两个模型的单个记录,你可以从模型手动构建字典列表(例如通过迭代)然后使用 json.dumps
而不是 Django 序列化程序:
import json
# ...
r = []
for user in User.objects.all():
r.append({
'username': user.username,
# ....
'address': user.userprofile.address
})
my_json = json.dumps(r)
还没有测试过这个,但我希望你明白了。
要获得嵌套对象序列化,您可以使用 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)
我有一个客户档案模型如下
class UserProfile(models.Model):
user = models.OneToOneField(User)
address = models.CharField(max_length=200)
和一个授权用户模型。我想要所有用户对象的列表,其地址为 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())
我只能得到授权用户数据。如何获取关联的个人资料数据和用户数据?
简单的方法是分别序列化每个模型。除此之外,如果你真的需要 return json 两个模型的单个记录,你可以从模型手动构建字典列表(例如通过迭代)然后使用 json.dumps
而不是 Django 序列化程序:
import json
# ...
r = []
for user in User.objects.all():
r.append({
'username': user.username,
# ....
'address': user.userprofile.address
})
my_json = json.dumps(r)
还没有测试过这个,但我希望你明白了。
要获得嵌套对象序列化,您可以使用 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)