Django 模型中的有序列表
Posted
技术标签:
【中文标题】Django 模型中的有序列表【英文标题】:Ordered list in Django Model 【发布时间】:2015-02-24 10:51:49 【问题描述】:我有一个 Django 项目,我希望模型包含另一个模型的有序对象列表。如果我理解正确,列表通常使用从包含对象指向包含对象的外键来完成。但是如果我这样做,我会确保保持对象的顺序(我在管理面板中添加它们的顺序)吗?是什么决定了它们的内部顺序?
另外,如果具有外键的元素是无序的,我将如何在 Django 模型中创建有序列表?
【问题讨论】:
第一次只问 1 个问题 它们将按照您将它们添加到新模型表中的顺序出现,尽管它们在原始表中具有顺序。因此,新表将按照您创建它们的顺序包含行,其中包含对另一个表中另一行的引用。 我通过改编这个 Django sn-p 做了类似的事情:djangosnippets.org/snippets/998 【参考方案1】:您可以在模型的 Meta 选项中指定要排序的字段。
见https://docs.djangoproject.com/en/dev/ref/models/options/#django.db.models.Options.ordering
如果您需要在不同查询中按不同字段排序,您可以覆盖单个查询集上的 order_by。
见https://docs.djangoproject.com/en/dev/ref/models/querysets/#order-by
如果您想根据时间戳对它们进行排序(例如,当它们被添加到您的数据库中时),那么您可以在 Meta 选项中指定它。
【讨论】:
【参考方案2】:如果需要,您可以使用 auto_now_add 属性添加一个自动存储创建对象时的日期时间的字段,如下例所示:
creation_date = models.DateTimeField('Date', auto_now_add=True)
然后,您可以通过此字段在数据库中排序,带有 Meta 属性:
class Meta:
ordering = ('creation_date',)
【讨论】:
以上是关于Django 模型中的有序列表的主要内容,如果未能解决你的问题,请参考以下文章