Django-同一个表上的两个不同的联接语句



在Django项目中,作为模型,我有这样的东西:

class Company(models.Model):
name = models.CharField(_(u"Name"), max_length=100)
INPUT_TYPES = (('U', _(u"User")), ('A', _(u"Administrator")))
class CompanyData(models.Model):
company = models.ForeignKey(Company, related_name='data')
input_type = models.CharField(_(u"Input type"), max_length=2,
choices=INPUT_TYPES)
active = models.BooleanField(_(u"Active"))
datafield_1 = models.CharField(_(u"Data field 1"), max_length=100)
datafield_2 = models.CharField(_(u"Data field 2"), max_length=100)
datafield_3 = models.CharField(_(u"Data field 3"), max_length=100)

可以以用户身份或管理员身份输入公司数据。

对公司进行搜索是可能的。可以在不处理输入类型的情况下进行搜索,但我想排除不活动的公司(无论是用户还是管理员将其设置为不活动)。我试过这样一个查询:

Company.objects.filter(data__data_1='query string'
).exclude(Q(data__active=False))

但是,如果其中一个数据输入是活动的并且与查询字符串匹配,即使另一个数据输出是非活动的,它也会返回公司。我试图通过强制输入类型来完善请求,但我没有找到任何方法来强制Django在CompanyData表上生成两个不同的联接语句。

恭喜你,你发现了Django ORM的一个弱点。使用对象语法执行这种查询是不可能的;为了实现这一点,您需要使用原始查询。

最新更新