Djnago отношения вложенности "related_name"
Я пытаюсь создать одиночный цикл, который будет перебирать все размеры для каждого товара из категории. Мои модели:
class Category(models.Model):
...
class Product(models.Model):
category = models.ForeignKey(Category, db_column="id", on_delete=models.CASCADE, related_name="products")
...
class Size(models.Model):
product = models.ForeignKey(Product, db_column="id", on_delete=models.CASCADE, related_name="sizes")
...
И мой код в работе
def adjust_sizes(self, category: Category) -> None:
for size in category.products.sizes.all():
# rest of my function
Но когда я пытался запустить эту функцию, я получил ошибку:
*** AttributeError: 'RelatedManager' object has no attribute 'sizes'
Я хотел, чтобы это выполнялось в одном цикле, может кто-нибудь помочь мне, как это сделать?
Вы не можете получить доступ к менеджеру поверх менеджера. В этом случае запрос выполняется в обратном порядке, так:
def adjust_sizes(self, category: Category) -> None:
for size in Size.objects.filter(product__category=category):
# rest of my function
pass
Вполне вероятно, что использование db_column='id'
является, однако, не хорошей идеей, поскольку оно может/будет конфликтовать со столбцом базы данных для первичного ключа.
lass Category(models.Model): ...
class Product(models.Model): category = models.ForeignKey(Category, db_column="id", on_delete=models.CASCADE, related_name="products") ...
class Size(models.Model): product = models.ForeignKey(Product, db_column="id", on_delete=models.CASCADE, related_name="sizes") ...