Как получить доступ к дочерней модели из родительской модели с помощью 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)