2012-02-23 67 views
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)经理方法中。我想知道这是什么原因,因为前者似乎更加冗长?

+2

这只是一个惯例。就像您可以在[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

回答

2

我想作者只是喜欢冗长。没有区别。经理类的get方法定义为:

def get(self, *args, **kwargs): 
    return self.get_query_set().get(*args, **kwargs) 

你可以看到自己在Django/DB /模型/ manager.py

相关问题