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

时间:2012-09-20 22:39:54

标签: python 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表上创建两个不同的join语句。

1 个答案:

答案 0 :(得分:2)

恭喜,您已经遇到了Django ORM的一个弱点。使用对象语法无法执行此类查询;你需要诉诸raw queries才能做到这一点。