2011-01-25 35 views
2

模型如下所示:Django的:根据默认排序一个多到很多相关的字段值和计数

class Weekday(models.Model): 
    ''' 
    >>> for w in Weekday.objects.all(): 
    ... print w 
    ... 
    Sunday 
    Monday 
    Tuesday 
    Wednesday 
    Thursday 
    Friday 
    Saturday 
    ''' 
    name = models.CharField(max_length=9) 

    def __unicode__(self): 
     return self.name 

class Stop(models.Model): 
    class Meta: 
     ordering = ???? 

    name = models.CharField('Stop name', max_length=32) 
    days_open = models.ManyToManyField(Weekday) 

那种订货的我想要的是:有

  1. 一切所有7天
  2. 具有周日
  3. 一切有周一
  4. 等等,等等(有联络断路器作c
  5. 一切平日,然后停止的名称)

任何人有任何建议如何处理这个?这应该以某种方式在经理中完成?或者也许有一个简单的方法来做到这一点?

欣赏它!

回答

2

您只能在Meta.ordering中指定模型字段,因此如果要实现您描述的逻辑,则必须使用custom manager

编辑:

你可以沿着添加某种weight场对你的Stop模型,更新字段更新days_open,然后你就可以使用排序= [“-weight”]

或者,这样的事情可能适合你的目的:

Stop.objects.annotate(weight=models.Sum('weekday__weight')).order_by('-weight') 

- 当然这需要增加weight字段为Weekday模型并预填充所有记录。这也可以作为我在上面提到的自定义管理器中的方法来实现。

+0

带我走下了小路!谢谢Zielinski先生。 – 2011-01-26 16:40:09