作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要注释一些必须命名为“id”的东西,它与表“id”的主键相同。最终输出应该是一个字典数组。我知道我可以使用另一个名称(如“id_for_tree”)进行注释,然后在使用 values()
制作字典并循环更改键之后。像这样的东西:
item_list = MyTable.objects.annotate(id_for_tree=Concat(F('id'), F('Code'), output_field=CharField())).values('Name', 'id_for_tree')
for any_item in item_list:
any_item['id'] = any_item.pop('id_for_tree')
很明显,这个解决方案没有很好的性能。我怎样才能摆脱
"The annotation 'id' conflicts with a field on the model"
丢弃之前的'id'
并注释一个新的'id'
的异常?
最佳答案
"something that has to be named 'id'"
为什么?
无论如何,除此之外,您是否尝试过在调用 annotate
之前简单地将调用移动到 values
?
即
item_list = MyTable.objects.values('Name').annotate(id=Concat(F('id'), F('Code'), output_field=CharField()))
这是基于 Name
字段也是唯一的。
编辑:如果 Name
字段不是唯一的,那么您可以通过额外调用 values
和 annotate 来完成
。即
item_list = MyTable.objects.values(
'Name', 'id'
).annotate(
id_dummy=Concat(F('id'), F('Code'), output_field=CharField())
).values(
'id_dummy',
'Name'
).annotate(
id=F('id_dummy')
)
来自问题所有者的编辑:最后,我使用这段代码来避免无意中的 group_by:
item_list = MyTable.objects.annotate(
OriginalId=F('id')
).values(
'Name',
'OriginalId'
).annotate(
id=Concat(F('id'), F('Code'), output_field=CharField()
))
关于 python Django : Annotating a same name with a database field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48191484/
我是一名优秀的程序员,十分优秀!