Я использую представления на основе классов, и у меня всегда одна и та же проблема без элегантного решения. Мои наборы запросов должны показывать только те, которые принадлежат пользователю запроса.
Код
просмотр:
class MyListView(ListView):
model = MyModel
def get_queryset(self):
return self.model.objects.owned_by_user(self.user)
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.user = None
def dispatch(self, request, *args, **kwargs):
self.user = request.user
return super().dispatch(request, *args, **kwargs)
модель:
class MyModelQuerySet(models.QuerySet):
def owned_by_user(self, user):
return self.filter(user_field=user)
class MyModelManager(models.Manager):
def get_queryset(self):
return MyModelQuerySet(self.model, using=self._db)
def owned_by_user(self, user):
return self.get_queryset().owned_by_user(user)
class MyModel(models.Model):
user_field = ...
objects = ProductRequestManager()
Лучшая практика 1:
Я думаю, что должен перезаписать отправку, чтобы добавить request.user. Моя IDE отмечает: «Пользователь атрибута экземпляра определен за пределами init . Чтобы предотвратить это, мне также нужно перезаписать init (). Как мне добиться этого с меньшим количеством кода?
Рекомендация 2:
Есть ли другой способ получить наборы запросов, принадлежащие текущему пользователю?