class Beer(models.Model):
pass
class Salas(models.Model):
name = models.CharField(max_length=20)
beers = models.ManyToManyField('Beer', blank=True)
beer = Beer.objects.get(user=user)
id_sala = request.GET['id_sala']
sala = get_object_or_404(Salas, id=id_sala)
if beer.salas_set.filter(nombre=sala):
# if beer.objects.filter(sitios__id=beer).exists():
sala.beers.remove(beer)
else:
sala.beers.add(beer)
我想知道啤酒与sala之间是否存在关系,如何制作这个?
答案 0 :(得分:28)
我建议你使用:
if beer.salas_set.filter(pk=sala.pk).exists():
# do stuff
如果您使用sala in beer.salas_set.all()
,它会从关系表中选择所有记录并循环遍历它们,以查找给定对象是否存在。但是,beer.salas_set.filter(pk=sala.pk).exists()
仅从数据库中选择零行或一行,并立即给出结果(不循环)。
答案 1 :(得分:9)
使用您的解决方案可能会出现问题,因为salas的名称并不是唯一的。所以,如果你按照sala的名称过滤,希望找到一个只有一个sala,那可能不会发生。
我建议你这样做:
if sala in beer.salas_set.all():
#do stuff:
else:
# do other stuff
这样,beer.salas_set.all()
将返回一个QuerySet,您可以使用'in'关键字检查特定对象是否存在。