Фильтрация в отношениях "многие-ко-многим" в Django
У меня есть три модели, здесь я показываю две:
class Product(models.Model):
description = models.CharField(max_length=50)
price = models.IntegerField()
stock = models.IntegerField()
def __str__(self):
return self.description
# Many-to-many relations
class ProductsCategories(models.Model):
idProduct = models.ForeignKey(Product, on_delete=CASCADE)
idCategory = models.ForeignKey(Category, on_delete=CASCADE)
Как я могу получить в файле views.py товары, отфильтрованные, например, по номеру категории 3? У меня есть следующее: products_list = Product.objects.all()
Заранее спасибо.
В Django вам не нужно создавать модель для "третьей" таблицы. Вы можете просто использовать поле ManyToManyField и затем отфильтровать результаты по нужным критериям:
class Product(models.Model):
description = models.CharField(max_length=50)
price = models.IntegerField()
stock = models.IntegerField()
categories = models.ManyToManyField(Category)
def __str__(self):
return self.description
В файле views.py необходимо отфильтровать результаты:
products_list = Product.objects.filter(categories__id=1)