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)
ビールとサラの関係があるのか、どうやって作るのか知りたい?
Salasの名前は一意ではないため、このソリューションでは問題が発生する可能性があります。したがって、1つだけのサラを見つけることを期待して、サラの名前でフィルタリングした場合、それは起こらない可能性があります。
私はあなたに行うことをお勧めします:
_if sala in beer.salas_set.all():
#do stuff:
else:
# do other stuff
_
こうすることで、beer.salas_set.all()
は、特定のオブジェクトが「in」キーワードでそこにあるかどうかを確認できるQuerySetを返します。
使用することをお勧めします:
_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()
はデータベースから0行または1行のみを選択し、(ループせずに)結果をすぐに返します。