Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.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';s选择\u相关-筛选引用的引用_Python_Django - Fatal编程技术网

Python Django';s选择\u相关-筛选引用的引用

Python Django';s选择\u相关-筛选引用的引用,python,django,Python,Django,我试图使用Django的select_related进行查询,该查询将遍历两个独立的模型 条件如下所示(注意,值是一个重命名-它不是与值相关的语法): 数据模型如下所示: class valueResults(models.Model): value_id = models.ForeignKey(value) result_date = EncryptedDateTimeField() status_code = EncryptedCharField(max_length

我试图使用Django的select_related进行查询,该查询将遍历两个独立的模型

条件如下所示(注意,值是一个重命名-它不是与值相关的语法):

数据模型如下所示:

class valueResults(models.Model):
    value_id = models.ForeignKey(value)
    result_date = EncryptedDateTimeField()
    status_code = EncryptedCharField(max_length=25)
    value = EncryptedIntegerField()
    test_started = EncryptedDateTimeField()

class value(models.Model):
    value_id = EncryptedCharField(primary_key=True, unique=True, max_length=100)
    valuetype_id = models.ForeignKey(valueType)
    dateitemord = EncryptedDateTimeField()
    status = EncryptedCharField(max_length=100)
    item_id = models.ForeignKey(Items)
    user_id = models.ForeignKey(User)

class Items(models.Model):
    item_id = models.CharField(primary_key=True,max_length=100)
    mailed_date = EncryptedDateTimeField()
    received_date = EncryptedDateTimeField()
    last_viewed = EncryptedDateTimeField()
    dateitemsent = EncryptedDateTimeField()
    itemidvalue = EncryptedCharField(max_length=100)
    itemsent = EncryptedCharField(max_length=25)
    itemret = EncryptedCharField(max_length=25)
    dateitemret = EncryptedDateTimeField()
    status = EncryptedCharField(max_length=25)

我的理想目标是根据valueResults模型的状态代码和项目id进行过滤。这可能吗?

选择相关的是一种性能调优工具,与存在性测试无关。它不会改变什么样的查询是可能的。可以使用
符号对外键关系进行过滤-有关示例,请参阅。例如,从
valueResults
模型到
value
项目的链接:

 if valueResults.objects.filter(value_id__item_id__status="yes", value_id__item_id__item_id=item_id).exists():
     # do something

select_related:返回将“遵循”外键关系的查询集,在执行查询时选择其他相关对象数据。这是一个性能提升器,它会导致单个更复杂的查询,但意味着以后使用外键关系将不需要数据库查询。exists():如果QuerySet包含任何结果,则返回True,否则返回False。这将尝试以尽可能最简单和最快的方式执行查询,但它执行的查询与普通QuerySet查询几乎相同。据我所知,由于select_related返回一个查询集,我应该能够对其执行exists()。在
exists
查询中使用
select_related
在语义上并不错误,它只是没有用。基本上,
select\u related
扩展普通查询以加入相关表。如果要链接外键查找,也将执行必要的联接。由于您在
select\u-related
子句中显式列出字段,因此它可能不会执行任何不必要的联接,但肯定不会有任何帮助。
 if valueResults.objects.filter(value_id__item_id__status="yes", value_id__item_id__item_id=item_id).exists():
     # do something