以下是我的模型:
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)。
因此,如果我需要根据Collection类的title属性过滤查询集,我可以键入这样的查询集。
query_set = Product.objects.filter(collection__title = 'beauty')
注意:这里我使用子节点访问父节点;问题是,我怎样才能反其道而行之?
我尝试了这行代码,但我得到一个错误说:无法解析关键字'product_set'到字段。query_set = Collection.objects.filter(product_set__inventory__lt=10)
我认为这个错误与您如何设置"产品"的相关名称有关。在"收藏"中;模型。当你使用filter() API时,你需要使用相关的名称来引用子组件,或者使用它的实际名称而不设置相关的名称。
看绿色的关于许多领域的说明这里在docs
试试这个:
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)