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)
I want to see if there is relationship of beer with sala, how to make this??
I advise you to use:
if beer.salas_set.filter(pk=sala.pk).exists(): # do stuff
If you use sala in beer.salas_set.all()
instead, it selects all records from the relation table and loops over them to find, whether the given object is there or not. However, beer.salas_set.filter(pk=sala.pk).exists()
only selects zero or one row from the database and immediately gives the result (without looping).
With your solution there might be a problem since name of salas is not unique. So, if you filter by the name of the sala expecting to find one and only one sala, that might not happen.
I advice you to do:
if sala in beer.salas_set.all(): #do stuff: else: # do other stuff
that way, beer.salas_set.all()
will return a QuerySet in which you can check if a specific object is there with the 'in' keyword.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With