Python Django-同一个表上的两个不同join语句
在作为模型的Django项目中,我有如下内容:Python Django-同一个表上的两个不同join语句,python,django,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, rela
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))
可以以用户或管理员的身份输入公司数据
可以对公司进行搜索。可以在不处理输入类型的情况下进行搜索,但我希望排除不活动的公司(无论用户或管理员是否将其设置为不活动)。我尝试过这样的查询:
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语句。恭喜,您发现了Django ORM的一个弱点。无法使用对象语法执行此类查询;为了实现这一点,您需要求助于。我担心这个答案。与我所介绍的相比,模型和搜索字段要复杂得多。动态原始查询将非常糟糕。但是如果没有其他的方法,我会尝试做一个混合。。。尽管如此,谢谢你。