我在自定义管理器中有一个用于重命名字段的模型的get_queryset:
class Manager:
def get_queryset(self):
return super(Manager, self).get_queryset().values(renamed_field=F('original_field'))
为什么我可以在重命名的字段上执行.filter,但是当我执行.get时,我需要使用原始字段名称?
这有效:
Model.objects.filter(renamed_field='Test')
但是不存在与匹配查询有关的错误:
Model.objects.get(renamed_field='Test')
答案 0 :(得分:1)
来自docs关于查询集:
在内部,可以构造,过滤,切片和查询集 通常在没有实际访问数据库的情况下通过。没有 实际上会发生数据库活动,直到您进行评估 查询集。
调用get
方法时,您会命中数据库。这说明了为什么会收到有关没有匹配查询的错误的信息。