Django Rest框架 - 在列表中获取完整的相关对象 [英] Django Rest Framework - Get full related objects in list
问题描述
我有以下型号:
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屋!