Django关系嵌套“related_name”

c86crjj0  于 2022-12-14  发布在  Go
关注(0)|答案(2)|浏览(106)

我正试图创建一个循环,将迭代通过所有尺寸的每个产品的类别.

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'

我想让它在单循环中运行,有人能帮我吗?

cyej8jka

cyej8jka1#

您不能在管理器之上访问管理器。在这种情况下,您要做的是反向查询,因此:

def adjust_sizes(self, category: Category) -> None:
    for size in Size.objects.filter(product__category=category):
        # rest of my function
        pass

然而,使用db_column='id'很可能不是一个好主意,因为它可能/将与主键的数据库列冲突。

ajsxfq5m

ajsxfq5m2#

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")
    ...

相关问题