Python django模型中的order属性如何决定字段的顺序?

Python django模型中的order属性如何决定字段的顺序?,python,django,django-rest-framework,Python,Django,Django Rest Framework,这些问题一读就显得很愚蠢。我知道。我遇到过一些模型,其中属性“order”只是一个整数字段,它决定前端的顺序。示例模型: class FilterGroup(models.Model): """ A way to group different kinds of filters from each other. """ name = models.CharField(max_length=255) slug = models.CharField(max_l

这些问题一读就显得很愚蠢。我知道。我遇到过一些模型,其中属性“order”只是一个整数字段,它决定前端的顺序。示例模型:

class FilterGroup(models.Model):
    """
    A way to group different kinds of filters from each other.
    """
    name = models.CharField(max_length=255)
    slug = models.CharField(max_length=255, blank=True, null=True,
                            help_text='the slug to be used as the name of the '
                                      'query parameter in the search URL')
    order = models.IntegerField(default=1,
                                help_text='An integer defining which order '
                                          'the filter group should show up '
                                          'in the sidebar')

    class Meta:
        ordering = ('-order', 'name')
        unique_together = (
            ('name', 'slug'),
        )
有三个过滤器组。文档、技能水平和主题。它们的呈现顺序为:“主题”、“技能水平”、“文档”,而不是字母顺序。根据帮助文本,顺序决定字段的顺序。我理解,元排序意味着它按名称升序,按“顺序”降序。因为order的值是1,所以它如何像它那样渲染。这是序列化程序代码段:

for group_options, filters in filter_groups.items():
            group_name, group_slug, group_order = group_options
            sorted_filters = sorted(filters, key=attrgetter('name'))
            grouped_filters.append(FilterGroup(name=group_name,
                                               slug=group_slug,
                                               order=group_order,
                                               options=sorted_filters))
        return FacetedFilterSerializer(
            sorted(grouped_filters, key=attrgetter('order')),
            many=True
        ).data
通过获取“order”属性对其进行排序。我不理解呈现过滤器组顺序背后的原因是整数值为1,它定义了在Django中使用QuerySet检索对象时对象的默认顺序。这大致相当于每次调用Model.objects时调用Model.objects.order_byModel.Meta.ordering,这意味着您也可以通过在任何queryset上重写它


在您的例子中,实际上并没有使用queryset来构建FilterGroup对象的列表,因此Meta.ordering实际上并不起作用。您在对sorted的最后一次调用中手动覆盖排序,这实际上相当于.order\u byorder,与您在Meta.ordering中设置的相反。

我不确定您到底想做什么,您能否更具体地说明您对排序的不了解?请问您是在找订货人吗?您是否验证了FilterGroup的纯查询是否按照显示的顺序返回它们?您可以在shell中对此进行测试。我可以看到排序调用导致它以一种您不期望的方式对它们进行排序,因为您没有在其中指定名称。