如何在注释键中使用百分号
How to use percentage sign in annotate key
我正在尝试使用包含百分号的字符串对结果列名称进行注释。这是简化的代码,基本上可以在任何模型上 运行:
from django.db.models import F
annotates = {'TEST %': F('id')}
SomeModel.objects.annotate(**annotates)[:1]
这会产生错误 IndexError: tuple index out of range
所以我假设 Django 正在尝试对该字符串进行一些格式化,我尝试使用双百分号 'TEST %%'
来转义它,这不会引发错误但是它 returns 双空格作为列名,这不是我需要的。
在 Django 2.2 和 3.1 中结果相同
这是 Django 错误还是我在这里遗漏了一些已知的转义序列?
您不能在 Django
中使用带有 F()
或 Cast()
的 %
登录注释。
因为他们在他们的方法中使用了旧的字符串格式(即使用百分号格式的 as_sql
方法)并且您的错误来自这些方法中的 return template % data, params
行并且您已经插入另一个百分比登录到默认模板,它无法呈现它的模板。它与您的 SQL 查询或数据库无关,导致此错误的唯一原因是它们用于格式化字符串的方式。跳过此错误的一种方法是更改行
annotates = {'TEST %': F('id')}
至
annotates = {'TEST %%': F('id')}
这会告诉您的 Python
的解释器跳过格式中的百分号,但请注意,在您的注释结果中您将有类似的内容:
{...other fields..., 'TEST %%': some id}
我正在尝试使用包含百分号的字符串对结果列名称进行注释。这是简化的代码,基本上可以在任何模型上 运行:
from django.db.models import F
annotates = {'TEST %': F('id')}
SomeModel.objects.annotate(**annotates)[:1]
这会产生错误 IndexError: tuple index out of range
所以我假设 Django 正在尝试对该字符串进行一些格式化,我尝试使用双百分号 'TEST %%'
来转义它,这不会引发错误但是它 returns 双空格作为列名,这不是我需要的。
在 Django 2.2 和 3.1 中结果相同
这是 Django 错误还是我在这里遗漏了一些已知的转义序列?
您不能在 Django
中使用带有 F()
或 Cast()
的 %
登录注释。
因为他们在他们的方法中使用了旧的字符串格式(即使用百分号格式的 as_sql
方法)并且您的错误来自这些方法中的 return template % data, params
行并且您已经插入另一个百分比登录到默认模板,它无法呈现它的模板。它与您的 SQL 查询或数据库无关,导致此错误的唯一原因是它们用于格式化字符串的方式。跳过此错误的一种方法是更改行
annotates = {'TEST %': F('id')}
至
annotates = {'TEST %%': F('id')}
这会告诉您的 Python
的解释器跳过格式中的百分号,但请注意,在您的注释结果中您将有类似的内容:
{...other fields..., 'TEST %%': some id}