如何通过Django ORM从父模型访问子模型?解决字段解析错误
解决Django父模型反向查询子模型的错误
问题原因
你遇到的Cannot resolve keyword 'product_set' into field错误,是因为Django默认的反向关联名称可能未被正确识别,更稳妥的方式是显式定义反向关联的名称。
解决方案
方法一:显式指定反向关联名称
修改Product模型中的collection外键字段,添加related_name参数明确反向关联的名称:
class Product(models.Model): description = models.TextField() unit_price = models.DecimalField(max_digits=6, decimal_places=2) inventory = models.IntegerField() # 添加related_name='products',指定Collection反向关联Product的名称 collection = models.ForeignKey(Collection, on_delete=models.PROTECT, related_name='products')
执行数据库迁移
修改模型后,执行迁移命令更新数据库结构:
python manage.py makemigrations python manage.py migrate
执行查询
使用指定的反向关联名称完成查询:
query_set = Collection.objects.filter(products__inventory__lt=10)
方法二:使用默认反向关联名称(无需修改模型)
如果不想修改模型,确认使用Django默认的反向关联名称(子模型小写名+_set),检查拼写无误后执行查询:
query_set = Collection.objects.filter(product_set__inventory__lt=10)
注:若此方式仍报错,优先使用方法一显式指定
related_name,避免默认名称带来的识别问题。
内容的提问来源于stack exchange,提问作者Usama Alzomor
相关产品推荐
相关产品推荐

