一读时问题似乎很愚蠢。我知道。我遇到了一些属性' order'这只是一个IntegerField确定前端的排序。示例模型:
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'),
)
有三个过滤器组。文件,技能水平和主题。它们按顺序呈现:'主题','技能级别''文档'这不是按字母顺序排列的。根据帮助文本,顺序确定字段的顺序。我理解Meta排序表明它按名称递增并按顺序递减。由于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
通过获取'命令'进行排序。属性。我不明白渲染过滤器组的顺序背后的原因是整数值为1
答案 0 :(得分:0)
Meta.ordering
property定义了在Django中使用查询集检索对象时的默认顺序。它大致相当于每次调用Model.objects.order_by(Model.Meta.ordering)
时调用Model.objects
,这意味着您也可以在任何查询集上通过calling order_by
覆盖它。
在您的情况下,您实际上并没有使用查询集来构建FilterGroup
个对象的列表,因此Meta.ordering
实际上并没有发挥作用。您在sorted
的最终通话中手动覆盖排序,实际上相当于.order_by("order")
,与您在Meta.ordering
中设置的相反。