Ограничить набор запросов в представлении generi c объектами с request.user в качестве внешнего ключа - PullRequest
2 голосов
/ 18 января 2020

Мне пришлось добавить метод только для классов UpdateView, DetailView, ListView и DeleteView в views.py, чтобы ограничить набор запросов только возвратами объектов, которые разрешено видеть вошедшему в систему пользователю (что в моем случае означает, что они являются пользователем внешнего ключа в модели объекта)

def get_queryset(self):
    base_qs = super(ViewName, self).get_queryset()
    return base_qs.filter(user=self.request.user)

Есть ли более эффективный способ сделать это с помощью Mixin или чего-то еще?

1 Ответ

3 голосов
/ 18 января 2020

Вы можете создать свой собственный миксин:

class UserFilterViewMixin:
    user_field = 'user'

    def get_queryset(self):
        return super().get_queryset().filter(
            **{self.user_field: self.request.user}
    )

Далее вы можете использовать миксин, например, с:

class MyListView(<b>UserFilterViewMixin</b>, ListView):
    model = MyModel

Вы можете установить другой атрибут user_field в своих представлениях , если вам нужно отфильтровать по owner=, created_by=, et c.

...