2012-05-16 49 views
1

说,我有一系列的书章的对象,这个模型中定义:的Django的任意排序对象

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

并假设我现在有四个章节:A,B,c和d。我将如何定义章节的顺序为b,d,c,a或其他任意序列?

+2

最通用的方法是添加整数字段,并按它排序。 – DrTyrsa

+0

-1为什么?这是一个很好的问题 – Goin

回答

0

我相信,你将与order-with-respect-to的Django元的选择很满意。

只要看看在Meta options reference

我不能找到一种方法,使用set_RELATED_orderid任何其他领域。 它发生在我,虽然我没有测试它,你可以在你的章模型order = IntegerField...,并有一个看起来像这样的地方声明:

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

我不是精确的,也不可靠这里。我只是试图用一个参考1和一个洞察力指向你的方向。

祝你好运!

-1

,你可以:

  1. 添加 '排序关键字'整场章模型,

  2. 设置SORTKEY每个模型,为你想要的章指1第一个,第二个等等,等等...

  3. 设置Chapter.Meta.ordering,s呵,SORTKEY将使用默认排序

它看起来像:

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

    class Meta: 
     ordering = ('sortkey',) 
+0

因此,如果我已经为我的章节分配了排序键(例如,a = 0,b = 1,c = 2,d = 3),那么更改顺序的最佳方法是什么? –

+0

@JosephMornin通过赋予其他值。 – DrTyrsa

0

这些解决方案是一个恐怖!

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

非常非常简单,漂亮