多对多字段的注释

时间:2016-01-26 12:32:51

标签: python django many-to-many

我有以下车型活动模型:

class Leg(models.Model):
    date = models.DateField(default=now)
    name = models.CharField(max_length=10)

class Cyclist(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE )
    legs = models.ManyToManyField( Leg, related_name='cyclist')

我知道我可以为每个骑自行车的人获取他们选择的腿的列表 - 或者为每条腿得到一个我可以获得选择该腿的cyctlists的列表。

我的问题是这样的:给定一个特定的骑自行车者,我想能够为所有腿创建一个查询集,每个腿都有一个布尔值,显示这个特定的骑车者是否选择了这条腿:

到目前为止,我有这个:

legs = models.Leg.objects.all().order_by('date').annotate( on_leg ???? magic???? )

我知道给定一个特定的Cyclist实例cyclist我可以针对特定的Leg实例leg进行测试:

boolean = leg.cyclists.filter(id=cyclist.id).exists()

但是,我不能在针对腿上的查询集的注释上做些类似的事情

1 个答案:

答案 0 :(得分:1)

可以使用.extra

完成此操作
from tkinter import messagebox

编辑:

另一种解决方案是采用整个legs = Leg.objects.all().order_by('date').extra( select={'cyclist_exists': "EXISTS(SELECT 1 FROM `myapp_cyclist_legs` \ WHERE `myapp_cyclist_legs`.`leg_id` = `myapp_leg`.id \ AND `myapp_cyclist_legs`.`cyclist_id` = %s)" % cyclist.id} ) #now you can do: for l in legs: print l.cyclist_exists 对象而不是仅仅标记布尔值True / False。

Cyclist