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

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

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

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)
Другие вопросы по тегам