我有以下车型活动模型:
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()
但是,我不能在针对腿上的查询集的注释上做些类似的事情
答案 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