Django Rest框架 - 在列表中获取完整的相关对象 [英] Django Rest Framework - Get full related objects in list

查看:128
本文介绍了Django Rest框架 - 在列表中获取完整的相关对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我对Django Rest框架很新,我试图使用DRF序列化一个(相关)对象的列表。



我有以下型号:

  class Answer(models。模型):
value = models.CharField(max_length = 128)

类用户(models.Model):
name = models.CharField(max_length = 128)
age = models.PositiveIntegerField()

class UserAnswer(models.Model):
user = models.ForeignKey(User)
answer = models.ForeignKey(Answer)

我想要得到的结果是这样的形式:

  [
{
name:myName1,
answers:[
{
value:myFirstAnswer
},
{
value:mySecondAnswer
},
{
value myThirdAnswer
},
]
},
{
name:myName2,
answers:[
{
value:myFirstAnswer
},
{
value: mySecondAnswer
},
{
value:myThirdAnswer
},
]
}
]

我现在试图这样做:

  class UserAnswerSerializer(serializers.ModelSerializer):
answers = AllUserAnswersSerializer(many = True,read_only = True)
class Meta:
model = User
fields =('name','answers')

但是,我得到以下结果:

  [
{
name:myName1
},
{
name:myName2
}
]

当我尝试这样做:

  class UserAnswerSerializer(serializers.ModelSerializer):
answers = serializers.PrimaryKeyRelatedField(many = True,read_only = True)
class Meta:
model = User
fields =('name','answers )

然后我得到以下结果(一个例子):

  [
{
name:myName1,
answers:[
1,
2,
3
]
},
{
name:myName2,
answers:[
4,
5,
6
]
}
]

我很难做这个工作,希望有人能告诉我如何将主键转换成实际对象!



谢谢

解决方案

删除序列化程序中的答案字段的明确定义,并添加 depth = 1 。它应该如下所示:

  class UserAnswerSerializer(serializers.ModelSerializer):
class Meta:
depth = 1
model =用户
fields =('name','answers')

有关深度的信息: http:// www .django-rest-framework.org / api-guide / serializers /#指定嵌套序列化


I'm rather new to Django Rest Framework and I'm trying to use DRF to to serialize a list of (related) objects.

I have the following models:

class Answer(models.Model):
   value = models.CharField(max_length=128)

class User(models.Model):
   name = models.CharField(max_length=128)
   age = models.PositiveIntegerField()

class UserAnswer(models.Model):
    user = models.ForeignKey(User)
    answer = models.ForeignKey(Answer)

And the result I'm trying to get is in this form:

[
    {
     "name": "myName1",
     "answers": [
        {
          "value": "myFirstAnswer"
        },
        {
          "value": "mySecondAnswer"
        },
        {
          "value": "myThirdAnswer"
        },
        ]
    },
    {
     "name": "myName2",
     "answers": [
        {
          "value": "myFirstAnswer"
        },
        {
          "value": "mySecondAnswer"
        },
        {
          "value": "myThirdAnswer"
        },
        ]
    }
]

I'm trying to do it this way now:

class UserAnswerSerializer(serializers.ModelSerializer):
    answers = AllUserAnswersSerializer(many=True, read_only=True)
    class Meta:
        model = User
        fields = ('name', 'answers')

But then I get the following result:

[
    {
        "name": "myName1"
    }, 
    {
        "name": "myName2"
    }
]

And when I try to do it this way:

class UserAnswerSerializer(serializers.ModelSerializer):
    answers = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
    class Meta:
        model = User
        fields = ('name', 'answers')

Then i get the following result (an example again):

[
    {
     "name": "myName1",
     "answers": [
        1,
        2,
        3
        ]
    },
    {
     "name": "myName2",
     "answers": [
        4,
        5,
        6
        ]
    }
]

I'm having a hard time making this work, hope someone can show me how to convert the Primary Key's to actual objects!

Thanks!

解决方案

Remove the explicit definition of the answers field in your serializer and add depth=1. It should look like this:

class UserAnswerSerializer(serializers.ModelSerializer):
    class Meta:
        depth = 1
        model = User
        fields = ('name', 'answers')

Info about depth: http://www.django-rest-framework.org/api-guide/serializers/#specifying-nested-serialization

这篇关于Django Rest框架 - 在列表中获取完整的相关对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆