模型如下所示:
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)
我想要的订单是:
任何人对如何处理此事都有任何建议?应该以某种方式在经理中完成吗?或者也许有一种简单的方法可以做到这一点?
欣赏它!
答案 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
模型并为所有记录预填充它。这也可以作为上面提到的自定义管理器中的方法实现。