how to verify if object exist in manytomany

Henry Ramos picture Henry Ramos · May 2, 2014 · Viewed 26.2k times · Source

Models

class Beer(models.Model):
    pass

class Salas(models.Model):
    name =  models.CharField(max_length=20)
    beers =     models.ManyToManyField('Beer', blank=True)

View

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??

Answer

Jakub QB Dorňák picture Jakub QB Dorňák · Dec 2, 2016

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).