Django:基于多对多相关字段值和计数的默认排序

时间:2011-01-25 20:06:32

标签: python django django-models

模型如下所示:

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. 等等(领带断路器是工作日的计数,然后是停止的名字)
  5. 任何人对如何处理此事都有任何建议?应该以某种方式在经理中完成吗?或者也许有一种简单的方法可以做到这一点?

    欣赏它!

1 个答案:

答案 0 :(得分:2)

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

编辑:

您可以在weight模型中添加某种Stop字段,更新该字段并更新days_open,然后您就可以使用 ordering = [' -weight']

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

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

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