2013-11-10 10 views
1

Мне интересно, как я могу получить текущий идентификатор пользователя в views.py? Кроме того, как я могу получить идентификатор группы текущего пользователя? Нужно ли напрямую запрашивать базу данных с помощью идентификатора пользователя? Большое спасибо.Django: как получить идентификатор группы текущего пользователя

ответ

1

Посмотреть функции получают request как один из их параметров. Предполагая, что вы используете встроенное приложение auth, текущий пользователь (если есть) будет request.user. Это может быть представление anonymous user, если сеанс не имеет зарегистрированного пользователя - см. docs, если вы не хотите этого допускать.

Пользователи могут быть во многих группах, поэтому я не совсем уверен, что вы подразумеваете под «id группы». Группы пользователей доступны как стандартное поле «многие ко многим», как request.user.groups. Это объект-менеджер, поэтому вы можете применять фильтры и тому подобное, чтобы получить их все, request.user.groups.all().

+0

Спасибо! Мне нужен идентификатор группы, потому что я расширил групповые модели, поэтому я думаю, что мне понадобится идентификатор группы, чтобы получить значения полей. Но с 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() 

Работы Perfect!

Так и может заменить 'имя' с 'ид' получить группы ID

Смежные вопросы