Django对象的任意排序

时间:2012-05-16 12:54:02

标签: python django sequence

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

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

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

3 个答案:

答案 0 :(得分:0)

那些解决方案真是恐怖!!

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

非常简单漂亮

答案 1 :(得分:0)

我相信你会对order-with-respect-to Django Meta选项感到满意。

只需查看Meta options reference

即可

我找不到使用idset_RELATED_order之外的任何其他字段的方法。 它发生在我身上,虽然我没有测试它,你可以在你的章节模型中有一个order = IntegerField...,并且在某个地方有一个看起来像这样的声明:

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

我在这里不准确也不可靠。我只想用引用1和洞察力为您指明方向。

祝你好运!

答案 2 :(得分:-1)

你可以:

  1. 在章节模型中添加' sortkey' 整数字段,

  2. 为每个模型设置排序键,这意味着您首先需要1,第二个等等,等等...

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

  4. 看起来像是:

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