2013-11-10 623 views

回答

1

查看功能得到request作为他们的参数之一。假设您正在使用内置的身份验证应用程序,则当前用户(如果有)将为request.user。如果会话没有登录用户,这可能是anonymous user的表示形式 - 如果您不想允许,请参阅docs

用户可以在许多组中,所以我不太清楚“group id”是什么意思。用户组可用作标准的多对多字段,如request.user.groups。这是一个管理员对象,所以你可以应用过滤器等来获取它们,request.user.groups.all()

+0

谢谢!我需要组ID,因为我扩展了组模型,所以我想我需要组ID来获取字段值。但是对于request.user.groups.all(),它似乎只返回组的名称... – Robert

+0

'groups.all()'返回实际的'Group'对象。如果你“打印”它们将用他们的名字来表示,但'groups.all()[0] .somefield'也应该有效。除非你对模型的扩展改变了这种关系。如果是这样的话,你需要在你的问题中显示你的自定义模型代码。 –

+0

嘿,我有另一个问题:http://stackoverflow.com/questions/19898284/django-why-the-manytomany-choice-box-only-has-on-side你不帮我吗? – Robert

0

如果在用例中每个用户只有一个组,则可以使用request.user.groups.get()来获得该组。 objects.get()的作用有些类似于objects.all()[0]。因此,当该用户有多个组时,它会失败。

https://github.com/django/django/blob/master/django/db/models/query.py

def get(self, *args, **kwargs): 
    """ 
    Performs the query and returns a single object matching the given 
    keyword arguments. 
    """ 
    clone = self.filter(*args, **kwargs) 
    if self.query.can_filter(): 
     clone = clone.order_by() 
    clone = clone[:MAX_GET_RESULTS + 1] 
    num = len(clone) 
    if num == 1: 
     return clone._result_cache[0] 
    if not num: 
     raise self.model.DoesNotExist(
      "%s matching query does not exist." % 
      self.model._meta.object_name) 
    raise self.model.MultipleObjectsReturned(
     "get() returned more than one %s -- it returned %s!" % (
      self.model._meta.object_name, 
      num if num <= MAX_GET_RESULTS else 'more than %s' % MAX_GET_RESULTS 
     ) 
    ) 

如果你是分类您的用户后,只是延长了用户模型,并设置一个外键字段。对于这个问题,使用权限组似乎对我来说不是一个好方法。

0
user = auth.get_user(request) 
group = request.user.groups.values_list('name', flat=True).first() 

作品完美!

,这样你们可以'身份证'取代'名称'得到集团的ID