Задать вопрос
@imaginave2

Django-filters как передать текущего пользователя в FilterSet?

Нужно сделать так, чтобы пользователь видел только свои данные. У меня есть фильр где мне нужно получить доступ к request.user. Но Django-filter не передаёт этот объект по умолчанию. Мне удалось сделать такое решение, но у меня не получается передать request.user в FilterSet. Если я обращаюсь в фильтре "TransationsListFilter" к "request.user", возникает NoneType error (не имеет поля 'user')

filters.py
class TransationsListFilter(django_filters.FilterSet):
    def __init__(self, *args, **kwargs):
    self.user = kwargs.pop('user')
    super(TransationsListFilter, self).__init__(*args, **kwargs)

    transaction_date = DateFromToRangeFilter(widget=RangeWidget(attrs {'placeholder': 'DD/MM/YYYY'}))
    class Meta:
        model = Transations
        fields = ['transaction_date']

    @property
        def qs(self):
        return super(TransationsListFilter, self).filter(user=user)


views.py
class TransactionsList(PagedFilteredTableView):
    model = Transations
    table_class = TransactionsTable
    filter_class = TransationsListFilter
    formhelper_class = TransationsFormHelper


models.py
class Transations(models.Model):
    transaction_date = models.DateField(default=datetime.now, blank=True)
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        on_delete=models.CASCADE,
        default = 0
   )


utils.py
from django_tables2 import SingleTableView
from django_tables2.config import RequestConfig
 
class PagedFilteredTableView(SingleTableView):
    filter_class = None
    formhelper_class = None
    context_filter_name = 'filter'
 
    def get_queryset(self, **kwargs):
        qs = super(PagedFilteredTableView, self).get_queryset()
        self.filter = self.filter_class(self.request.GET, queryset=qs)
        self.filter.form.helper = self.formhelper_class()
        return self.filter.qs
 
    def get_context_data(self, **kwargs):
        context = super(PagedFilteredTableView, self).get_context_data()
        context[self.context_filter_name] = self.filter
        return context
  • Вопрос задан
  • 1318 просмотров
Подписаться 1 Средний 9 комментариев
Пригласить эксперта
Ответы на вопрос 1
@sgaynetdinov
Не проще сделать фильтрацию по `user` уже в `PagedFilteredTableView. get_queryset()` ?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы