Django restframework:如何序列化两个模型queryset?

时间:2017-09-28 17:56:25

标签: python json django django-models django-rest-framework

我有以下情况:用户可以拥有多个个人资料。这是我的模特课。像这样的例子:

models.py

class Profile:
    name=models.Charfield()

class UserProfile:
   user=models.ForeignKey(User)
   profile = models.ForeignKey(Profile)

serializers.py

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = '__all__'

我在这里通过JSON返回我的所有用户,但我想添加一个名为 profiles 的新字段,该字段将返回用户拥有的所有ID配置文件。

{ "id": 1,
  "name" : "John"
  ....
  profiles = [1, 2]
} 

如何获取(查询)用户拥有的所有配置文件并将其添加到我的最终JSON中?

2 个答案:

答案 0 :(得分:3)

UserSerializer上的

将字段配置文件声明为PrimaryKeyRelatedField

profiles = serializers.PrimaryKeyRelatedField()

默认情况下,此字段是可读写的,但您可以使用read_only标志更改此行为。

请参阅docs

答案 1 :(得分:0)

1)简化关系 - 在这种情况下只需要User和Profile模型,您不必在UserProfile表中存储显式关系,因为可以在Profile模型中完成相同的操作,只要您不需要用户与其他用户分享个人资料。

2)创建ProfileSerializer

3)向UserSerializer添加配置文件字段,其中包含许多= True属性&在'source'属性中提供引用 请回复这些文档,因为它们非常好 http://www.django-rest-framework.org/api-guide/serializers/

另外需要提及的是,创建UserProfile是在depricated中,在新版本的Django中,您可以使用设置属性AUTH_USER_MODEL扩展基本用户模型