2
在prior question我问,其中一个经理的方法看起来像:在Django管理器中,为什么使用self.get_query_set()。get(kwarg = val)而不是self.get(kwarg = val)?
def activate(key):
try:
profile = self.get(key=key)
except self.model.DoesNotExist:
return None
if not profile.key_expired():
# -> Activate user
return user
return None
有人建议使用self.get_query_set().get(key=key)
代替self.get(key=key)
经理方法中。我想知道这是什么原因,因为前者似乎更加冗长?
这只是一个惯例。就像您可以在[django源代码](https://code.djangoproject.com/browser/django/trunk/django/db/models/manager.py#L106)中看到的那样,基础管理器类通过一堆方法进行代理通过'.get_query_set()'定义在QuerySets上,所以你可以做'Foo.objects.get()','.filter()'等等,但它们都使用'.get_query_set()'。不使用它不应该是一个*问题*,真的。唯一的区别是你的回溯可能会有来自这些管理器方法的额外帧,而不是直接继续到查询集。 – AdamKG 2012-02-23 14:54:23