Фильтрация в отношениях "многие-ко-многим" в 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)
Вернуться на верх