ZvL*_*ZvL 5 python django rest django-rest-framework
我是Django Rest Framework的新手,我正在尝试使用DRF序列化(相关)对象列表.
我有以下型号:
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)
Run Code Online (Sandbox Code Playgroud)
我试图获得的结果是这种形式:
[
{
"name": "myName1",
"answers": [
{
"value": "myFirstAnswer"
},
{
"value": "mySecondAnswer"
},
{
"value": "myThirdAnswer"
},
]
},
{
"name": "myName2",
"answers": [
{
"value": "myFirstAnswer"
},
{
"value": "mySecondAnswer"
},
{
"value": "myThirdAnswer"
},
]
}
]
Run Code Online (Sandbox Code Playgroud)
我现在正试着这样做:
class UserAnswerSerializer(serializers.ModelSerializer):
answers = AllUserAnswersSerializer(many=True, read_only=True)
class Meta:
model = User
fields = ('name', 'answers')
Run Code Online (Sandbox Code Playgroud)
但后来我得到以下结果:
[
{
"name": "myName1"
},
{
"name": "myName2"
}
]
Run Code Online (Sandbox Code Playgroud)
当我尝试这样做时:
class UserAnswerSerializer(serializers.ModelSerializer):
answers = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
class Meta:
model = User
fields = ('name', 'answers')
Run Code Online (Sandbox Code Playgroud)
然后我得到以下结果(再次举例):
[
{
"name": "myName1",
"answers": [
1,
2,
3
]
},
{
"name": "myName2",
"answers": [
4,
5,
6
]
}
]
Run Code Online (Sandbox Code Playgroud)
我正在努力完成这项工作,希望有人能告诉我如何将主键转换为实际对象!
谢谢!
删除序列化程序中的答案字段的显式定义并添加depth=1
.它应该如下所示:
class UserAnswerSerializer(serializers.ModelSerializer):
class Meta:
depth = 1
model = User
fields = ('name', 'answers')
Run Code Online (Sandbox Code Playgroud)
有关深度的信息:http://www.django-rest-framework.org/api-guide/serializers/#specifying-nested-serialization
归档时间: |
|
查看次数: |
2449 次 |
最近记录: |