2

在作为模型的 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 表上创建两个不同的连接语句。

4

1 回答 1

2

恭喜,你发现了 Django 的 ORM 的弱点之一。不可能使用对象语法执行这种查询;您需要借助原始查询来完成此操作。

于 2012-09-20T23:15:31.287 回答