Python 如何在Django REST框架中对嵌套序列化程序字段的源参数进行排序?
我有两种型号:Python 如何在Django REST框架中对嵌套序列化程序字段的源参数进行排序?,python,django,django-rest-framework,django-serializer,Python,Django,Django Rest Framework,Django Serializer,我有两种型号:Page和Section。页面对象可能有一对多的节对象。 在models.py中: 类页面(models.Model): name=models.CharField(max_length=100,help_text='页面名称!') 类元: 排序=['id'] 类别部分(models.Model): page=models.ForeignKey(第页,on_delete=models.CASCADE) name=models.CharField(max_length=100,hel
Page
和Section
。页面
对象可能有一对多的节
对象。在
models.py中
:
类页面(models.Model):
name=models.CharField(max_length=100,help_text='页面名称!')
类元:
排序=['id']
类别部分(models.Model):
page=models.ForeignKey(第页,on_delete=models.CASCADE)
name=models.CharField(max_length=100,help_text='section的名称〕)
index=models.IntegerField(blank=True,help\u text='index number to sort section.')
类元:
排序=['id']
部分
对象中的索引
表示其在其余部分
对象中的顺序(位置),这些部分的页面
对象与其外键相同。
在serializers.py中
:
class SectionSerializer(serializers.ModelSerializer):
page=serializers.PrimaryKeyRelatedField(queryset=page.objects.all(),
多=假,必需=真)
类元:
模型=截面
字段=['id'、'page'、'name'、'index']
类PageSerializer(serializers.ModelSerializer):
sections=SectionSerializer(source='section_set',many=True,required=False)#问题就在这里。
#我可以执行类似source=“section\u set.order\u by('index')”的操作吗
类元:
型号=页
字段=['id','name','sections']
使用PageSerializer
中的sections
属性,我可以获得所有Section
对象,这些对象具有与外键相同的Page
对象。但不按其索引
字段排序。
当我使用PageSerializer
查询Page.objects.all
时,我在可浏览的API中得到了这个结果:
[
{
"id":1,
"name":"Home",
"sections":[
{
"id":10,
"page":1,
"name":"second_section_for_page_1",
"index":2
},
{
"id":11,
"page":1,
"name":"first_section_for_page_1",
"index":1
},
{
"id":12,
"page":1,
"name":"third_section_for_page_1",
"index":3
}
]
},
{
"id":2,
"name":"Profile",
"sections":[
{
"id":13,
"page":2,
"name":"second_section_for_page_2",
"index":2
},
{
"id":14,
"page":2,
"name":"first_section_for_page_2",
"index":1
}
]
}
]
我希望结果按索引
排序。像这样:
[
{
"id":1,
"name":"Home",
"sections":[
{
"id":11,
"page":1,
"name":"first_section_for_page_1",
"index":1
},
{
"id":10,
"page":1,
"name":"second_section_for_page_1",
"index":2
},
{
"id":12,
"page":1,
"name":"third_section_for_page_1",
"index":3
}
]
},
{
"id":2,
"name":"Profile",
"sections":[
{
"id":14,
"page":2,
"name":"first_section_for_page_2",
"index":1
},
{
"id":13,
"page":2,
"name":"second_section_for_page_2",
"index":2
}
]
}
]
我可以在PageSerializer
class中执行类似sections=SectionSerializer(source=“section\u set.order\u by('index'))
的操作吗?您可以尝试在section
类中使用ordering
属性。它将对所有部分
查询进行排序。我想我不能在节模型中使用ordering=['index']。因为我有一个Section view类来列出所有按其主键(id)排序的节。然后,您可以在Section view中编写queryset,根据其id显式排序Section
s。@wiaterb谢谢。我将实施你的建议。