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