Many to many field is just a repeatable foreign key field (recall foreign key is a one to many field)
Many to many fields to Tag and Ingredient
class Recipe(models.Model):
""" Ingredient to be used in a recipe"""
# one to many: one user for many recipies
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.CASCADE
)
title = models.CharField(max_length=255)
time_miniutes = models.IntegerField()
price = models.DecimalField(max_digits=5, decimal_places=2)
# For optional fields, prefer blank over null.
# If we set null, then in the code we have to check
# for both null and empty str
link = models.CharField(max_length=255, blank=True)
# many to many field is just a repeatable foreign key field
ingredients = models.ManyToManyField('Ingredient')
tags = models.ManyToManyField('Tag')
def __str__(self):
return self.title
Many to many fields are initialized differently from other fields
recipe = Recipe.objects.create(user=self.user, title="sample", time_minutes=5, price=5.0)
# using .add method
recipe.tags.add(Tag.objects.create(self.user, "new tag")
# using 'set' method, which takes in a query set
recipe.ingredients.set(Ingredients.objects.filter(user=self.user))