如何使用百分比登录注释键



我试图用包含百分号的字符串来注释结果列名。这是一个简化的代码,基本上可以在任何模型上运行:

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错误,还是我遗漏了一些已知的转义序列?

您不能将%登录注释与Django中的F()Cast()一起使用

因为他们在方法中使用了旧的字符串格式(即带有百分比符号格式的as_sql方法),而您的错误来自这些方法中的return template % data, params行,并且由于您在默认模板中插入了另一个百分比符号,因此无法呈现其模板。它与SQL查询或数据库无关,导致此错误的唯一原因是它们格式化字符串的方式。跳过此错误的一种方法是更改行

annotates = {'TEST %': F('id')}

annotates = {'TEST %%': F('id')}

它告诉Python的解释器跳过格式化中的百分比符号,但要注意的是,在注释结果中,你会有类似的内容:

{...other fields..., 'TEST %%': some id}

最新更新