2013-03-13 2 views
0

Когда я получаю список объектов, которые мне нужны только для объектов, принадлежащих зарегистрированному пользователю.Диспетчер моделей по умолчанию получает только объекты, принадлежащие зарегистрированному пользователю

Я думаю, может быть, это может быть сделано в менеджере модели, переопределив менеджер по умолчанию, но я не уверен, как получить вход в систему. Это то, что у меня есть до сих пор ...

class GroupsManager(models.Manager): 
    def get_query_set(self): 
     return super(GroupsManager, self).get_query_set().filter(user=???????) 

Я нахожусь на правильном пути? Как я могу достичь своей цели? Или есть лучший способ сделать это?

Спасибо.

ответ

3

У вас нет доступа к request (и, следовательно, текущий пользователь) в менеджере модели или модели. Таким образом, вы могли бы написать универсальный метод менеджер, который принимает пользовательский экземпляр и возвращает только объекты, принадлежащие этому пользователю:

class GroupsManager(models.Manager): 
    def for_user(self, user): 
     return self.get_query_set().filter(user=user) 

и в модели:

class Group(models.Model): 
    objects = GroupsManager() 

и в представлении:

def my_view(request): 
    groups = Group.objects.for_user(request.user) 
+0

почему вам не нужно «супер» здесь? – jason

+2

где о? На 'self.get_query_set'? Это потому, что я не переписываю метод get_query_set', я создаю свой собственный метод, который принимает параметр вместо этого и использует метод 'get_query_set' по умолчанию (поэтому поэтому нет необходимости вызывать родителя) –

+1

спасибо совершенным и хорошо объясненным. – jason