如何使用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)。

因此,如果我需要根据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)

相关内容

  • 没有找到相关文章

最新更新