1

假设我有一系列书籍章节对象,由该模型定义:

class Chapter(models.Model):
    heading = models.CharField()
    contents = models.TextField()

假设我目前有四章:a、b、c 和 d。我如何将章节的顺序定义为 b、d、c、a 或其他任意顺序?

4

3 回答 3

0

你可以:

  1. 向 Chapter 模型添加一个 'sortkey'整数字段,

  2. 为每个模型设置排序键,这意味着 1 代表你想要的第一章,2 代表第二章,等等……

  3. 设置Chapter.Meta.ordering,以便排序键将用于默认排序

它看起来像:

class Chapter(models.Model):
    heading = models.CharField()
    contents = models.TextField()
    sortkey = models.IntegerField(default=0)

    class Meta:
        ordering = ('sortkey',)
于 2012-05-16T12:59:18.560 回答
0

这些解决方案太可怕了!!

Chapter.objects.all().order_by("?")

非常非常简单漂亮

于 2012-05-16T16:03:23.107 回答
0

我相信您会对order-with-respect-toDjango Meta 选项感到非常满意。

看看Meta 选项参考

id除了in之外,我找不到使用任何其他字段的方法set_RELATED_order。尽管我没有对其进行测试,但我突然想到,您可以order = IntegerField...在 Chapter 模型中有一个,并且在某处有一个看起来像这样的语句:

order = [id for (order, id) in sorted([(x.order, x.id) for x in Chapter.objects.all()], key=0)]

我在这里既不准确也不可靠。我只是想通过参考1和洞察力为您指明方向。

祝你好运!

于 2012-05-16T16:17:11.757 回答