【发布时间】:2017-05-12 13:25:22
【问题描述】:
我在Django ModelAdmin 列表视图中优化了get_queryset:
.only('field1', 'field2',).select_related('rel1',)
这些优化与 get_object 更改视图所需的不同:
.only('field1', 'field2', 'field3',).select_related('rel1__rel2', 'rel3',).prefetch_related(...)
事情是,get_queryset and get_object are coupled:
class BaseModelAdmin(...):
...
def get_object(self, request, object_id, from_field=None):
"""
Returns an instance matching the field and value provided, the primary
key is used if no field is provided. Returns ``None`` if no match is
found or the object_id fails validation.
"""
queryset = self.get_queryset(request)
model = queryset.model
field = model._meta.pk if from_field is None else model._meta.get_field(from_field)
try:
object_id = field.to_python(object_id)
return queryset.get(**{field.name: object_id})
except (model.DoesNotExist, ValidationError, ValueError):
return None
我怎样才能覆盖get_queryset 而不必复制/粘贴上面的所有样板?
【问题讨论】:
-
目前还不清楚您到底想在这里实现什么。与其列出问题的可能解决方案,不如陈述问题本身。您在
get_queryset中的优化究竟是什么?您想在get_object中应用什么优化? -
@НазарТопольський 我已经更新了问题
标签: django django-admin