python - 如何结合 django "prefetch_related"和 "values"方法?

标签 python django

prefetch_relatedvalues方法如何结合应用?

以前,我有以下代码。性能优化需要限制此查询中的字段。

Organizations.objects.values('id','name').order_by('name')

现在,我需要预取其关联并使用“prefetch_related”方法将其附加到序列化程序中。

Organizations.objects.prefetch_related('locations').order_by('name')

在这里,我似乎找不到使用“prefetch_related”后限制字段的方法。

我尝试了以下方法,但这样做时序列化器看不到关联的“位置”。

Organizations.objects.prefetch_related('locations').values("id", "name").order_by('name')

模型骨架:

class Organizations(models.Model):
    name = models.CharField(max_length=40)

class Location(models.Model):
    name = models.CharField(max_length=50)
    organization = models.ForeignKey(Organizations, to_field="name", db_column="organization_name", related_name='locations')

    class Meta:
        db_table = u'locations'

最佳答案

如果您担心自己的应用性能,请使用 only() 来限制检索的字段数。参见 reference .

在上面的例子中,这将是:

Organizations.objects.prefetch_related('locations').only('id', 'name').order_by('name')

这将导致两个查询:

SELECT id, name FROM organizations;
SELECT * from locations WHERE organization_name = <whatever is seen before>;

关于python - 如何结合 django "prefetch_related"和 "values"方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43054459/

相关文章:

Django:从过滤器查询中获取第一个对象或创建

mysql - Django django_admin_log' 不存在

python - 如何在 Spyder/Anaconda 中使用 Python 从 Azure Blob 下载/上传文件

python - python 如何破坏对象名称和类定义?

python - Return 语句的奇怪 Try-Except-Else-Finally 行为

python - Django - 在模板中显示当前日期和时间

"select * from CF where column in (..,..,..)"的 python CQL 查询替换

python - 无法覆盖 Django ModelForm 中的模型字段

python - Django admin 表格内联 'Add More' 未显示

python - 如何使用表单元字段中未指定的字段进行 POST?