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),但第一个查询不是。。。