Менеджер моделей по умолчанию получает только объекты, принадлежащие зарегистрированному пользователю.
Когда я получаю список объектов, я всегда хочу только те объекты, которые принадлежат зарегистрированному пользователю.
Я думаю, может быть, это можно сделать в менеджере моделей, переопределив менеджер по умолчанию, но я не уверен, как войти в систему при использовании. Это то, что я до сих пор...
class GroupsManager(models.Manager):
def get_query_set(self):
return super(GroupsManager, self).get_query_set().filter(user=???????)
Я на правильном пути? Как я могу достичь своей цели? Или есть лучший способ сделать это?
Благодарю.
1 ответ
Решение
У вас нет доступа к 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)