【发布时间】:2021-02-26 07:46:16
【问题描述】:
我正在尝试使用包含百分号的字符串来注释结果列名称。这是基本上可以在任何模型上运行的简化代码:
from django.db.models import F
annotates = {'TEST %': F('id')}
SomeModel.objects.annotate(**annotates)[:1]
这会产生错误IndexError: tuple index out of range,所以我假设 Django 正在尝试对该字符串进行一些格式化,我尝试使用双百分号 'TEST %%' 对其进行转义,这不会引发错误,但它会返回双空格作为列名不是我需要的。
Django 2.2 和 3.1 的结果相同
这是 Django 错误还是我在这里遗漏了一些已知的转义序列?
【问题讨论】:
-
请不要。您甚至将如何访问注释?只需在模板中以百分比渲染即可。
-
我建议不要在列名中使用空格或百分号。这不仅会导致查询失败,而且还会使稍后在处理过程中难以访问属性。
-
它没有在模板中呈现,它是一个用于 excel 的产品统计查询。到目前为止,我在访问列名时对任何字符都没有任何问题,我不明白为什么访问它们会有问题。
-
那么这仍然不是一个好主意,只需使用一些逻辑呈现列名,而不是使用字典的属性/键。最好只使用有效的 Python 标识符,所以不要使用空格、百分比等。
-
这不起作用的原因是因为字符串格式适用于 query,但不适用于属性,所以在 query 中它会使用
TEST %,但它不会对属性进行相同的字符串插值。