Как получить доступ к дочерней модели из родительской модели с помощью Django ORM?

Вот мои модели:

class Collection(models.Model):
    title = models.CharField(max_length=255)
    featured_product = models.ForeignKey(
        'Product', on_delete=models.SET_NULL, null=True, related_name='+')


class Product(models.Model):
    description = models.TextField()
    unit_price = models.DecimalField(max_digits=6, decimal_places=2)
    inventory = models.IntegerField()
    collection = models.ForeignKey(Collection, on_delete=models.PROTECT)

У меня есть две модели, одна из которых является родительской (Collection), а другая - дочерней (Product).

Итак, если мне нужно отфильтровать набор запросов на основе атрибута title класса Collection, я могу набрать набор запросов следующим образом.

query_set = Product.objects.filter(collection__title = 'beauty')

Обратите внимание: Здесь я обращаюсь к родителю, используя ребенка; вопрос в том, как я могу сделать наоборот?

Я попробовал эту строку кода, но получил ошибку: Cannot resolve keyword 'product_set' into field. query_set = Collection.objects.filter(product_set__inventory__lt=10)

Я полагаю, что ошибка связана с тем, как вы установили связанное имя для "Product" в модели "Collection". Когда вы используете API filter(), вам нужно ссылаться на дочерний компонент, используя либо связанное имя, либо используя его фактическое имя и оставляя связанное имя неустановленным.

Посмотрите на примечание зеленого цвета о многих ко многим полям здесь в документации

Попробуйте это:

class Collection(models.Model):
title = models.CharField(max_length=255)
featured_product = models.ForeignKey(
    'Product', on_delete=models.SET_NULL, null=True, related_name='product_set') 

class Product(models.Model):
description = models.TextField()
unit_price = models.DecimalField(max_digits=6, decimal_places=2)
inventory = models.IntegerField()
collection = models.ForeignKey(Collection, on_delete=models.PROTECT)

И затем:

queryset=Collections.objects.filter(product_set__inventory__lt=10)
Вернуться на верх