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谢谢。我将实施你的建议。