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