使用拖放对模型中的条目重新排序

时间:2020-03-06 14:30:15  来源:igfitidea点击:

假设我在Django中有一个博客应用。如何使用默认管理员中的可拖动表格对帖子重新排序?

如果我不必在模型中添加任何额外的字段,那将是最好的选择,但是如果我确实必须这样做的话。

解决方案

在模型类中,我们可能必须添加" order"字段以维护特定的订单(例如,order = 10的项目是最后一个,order = 1是第一个)。然后,我们可以在admin change_list模板中添加JS代码(请参见此模板)以维护拖放功能。最后,将模型的Meta中的顺序更改为['order']。

注意:"如果我不必在模型中添加任何额外字段,那是最好的,但如果确实需要,我可以。"

抱歉,数据库中信息的顺序由信息本身决定:我们总是必须添加一列以进行排序。真的没有选择。

此外,要按此顺序检索内容,我们需要在查询中专门添加.order_by(x)或者在模型中添加ordering

class InOrder( models.Model ):
    position = models.IntegerField()
    data = models.TextField()
    class Meta:
        ordering = [ 'position' ]

没有添加的字段排序就不会发生。这是关系数据库的规则之一。

有关执行此操作的工作代码,请访问djangosnippets.org中的代码片段1053.