django模型查询反向参考过滤器混淆

django模型查询反向参考过滤器混淆,django,model,Django,Model,鉴于以下模型 class Category(models.Model): name = models.CharField(max_length=50) class Business(models.Model): name = models.CharField(max_length=50) category = models.ForeignKey(Category, related_name="businesses") class Package(models.Model):

鉴于以下模型

class Category(models.Model):
  name = models.CharField(max_length=50)

class Business(models.Model):
  name = models.CharField(max_length=50)
  category = models.ForeignKey(Category, related_name="businesses")

class Package(models.Model):
  business_id = models.ForeignKey(Business)
  status = models.CharField(max_length=50)
我有以下两个查询,以获取软件包处于活动状态的业务和类别列表:

filter_businesses = Business.objects.filter(package__status = 'live')
filter_categories = Category.objects.filter(businesses__package__status = 'live')

现在的问题是,如果相关名称“business”应该等于category.business\u set,为什么第一个查询中的过滤器不应该是package\u set?

假设您有两个相关模型:
SomeModel
SomeOtherModel
,以及
SomeOtherModel。SomeModel
SomeModel
的外键

给定任何
SomeModel
实例,
someothermodel\u set
属性是已筛选的相关模型的管理器。例如:

>>> your_some_model_instance = SomeModel.objects.all()[0]
在本例中,
您的\u some\u model\u实例。shomeothermodel\u集
相当于:

>>> SomeOtherModel.objects.filter(somemodel=your_some_model_instance)
[更新]


对不起,也许我没有更清楚地解释我的问题,解释起来很复杂。。。我知道XX_set和相关_name指的是经理,我想问的是,在第一个查询中,为什么不使用(package_set_status='live')给定第二个工作查询(businesss_package_ustatus='live'),因为第二个查询引用经理(通过相关_name),但第一个查询不是


过滤器接口使用约定的relatedmodelname\uuuu relatedmodelfield;在您的示例中,related_name用于为backreference提供一个更为奇特的名称,但这不是它的主要用途;ForeignKey字段中的related_name参数的目的是解决relatedmodelname与ForeignKey中已有字段冲突时的歧义。

Close。你是说,
..\u set.all()
在最后一个问题上。@IgnacioVazquez Abrams:你说得对,
..\u set
是一个管理者(比如
SomeModel.objects
),而不是一个查询集-为了简单起见,细节被省略了。对不起,也许我没有更清楚地解释我的问题,解释起来很复杂。。。我知道XX_set和相关_name指的是经理,我想问的是,在第一个查询中,为什么不使用(package_set_ustatus='live')给定第二个工作查询(businesss_upackage_ustatus='live'),因为第二个查询引用经理(通过相关_name),但第一个查询不是。。。