1

我有一个名为国家的多对多字段。
这些国家一个接一个地呈现为一个列表,就像我模板上的堆栈一样。
美国
澳大利亚
印度
中国

现在我希望管理员用户能够配置它们在模板上的列出顺序。没有特定的排序方法(按字母顺序排列并创建于 )。

所以我想就如何做到这一点提出建议。

4

1 回答 1

1

在您的 Country 模型中添加一个排序字段。通过添加元排序,您可以提供默认排序:

class Country(models.Model):
    name = models.CharField("Name", max_length=200)
    sorting = models.IntegerField("Ordering", blank=True, null=True, 
         help_text="A number. Use tens or hundreds to be able to add Counties.")

    class Meta:
        ordering = ('sorting', 'name')

您的模型中的排序是默认值。排序也可以在您的查询或 ModelAdmin 中设置。在views.py中:

countries = Country.objects.all().order_by('sorting', 'name')

在 admin.py 中:

class CountryAdmin(admin.ModelAdmin):
    ordering = ['sorting', 'name' ]
    #Bonus tip: editing in the list view!
    list_editable = ['sorting', ] 
    #Need sorting in list_display to get list_editable to work.
    list_display = ['title', 'sorting'] 

我使用 ['sorting', 'name' ] 因为您的国家/地区按 'sorting' 排序,但如果未填写(或相等)排序,则排序将回退到字母 'name'。

请记住:如果您在模型字段上使用 blank=True 和 null=True。然后排序字段将是可选的。但是没有值是 Null 并且在任何数字 [Null, Null, 1, 2, 3] 之前。这可能是不希望的。要进行排序,请留下“空白=真,空=真”。

使用数十个或数百个不明智,因此可以调整列表并适合国家/地区。

如果您尝试修复诸如“荷兰”之类的奇怪国家名称,建议您进行排序 = models.CharField() 并将 prepopulated_fields 放在您的管理员中:

prepopulated_fields = { 'sorting': ('name', ) }

你的编辑只需要删除“The”就可以让荷兰与尼泊尔而不是泰国相邻。

对数据进行排序后,您的模板很简单:

{% for country in countries %}{{ country.name }}{% endfor %}
于 2013-05-03T11:23:18.977 回答