Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-同一个表上的两个不同join语句_Python_Django - Fatal编程技术网

Python Django-同一个表上的两个不同join语句

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

在作为模型的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))
可以以用户或管理员的身份输入公司数据

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

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的一个弱点。无法使用对象语法执行此类查询;为了实现这一点,您需要求助于。

我担心这个答案。与我所介绍的相比,模型和搜索字段要复杂得多。动态原始查询将非常糟糕。但是如果没有其他的方法,我会尝试做一个混合。。。尽管如此,谢谢你。