Я хочу передать request.user или request.user.pk из представления на основе классов в ModelForm, чтобы отфильтровать набор запросов с помощью request.user.pk.У меня есть следующее представление:
class ArticleResurrectionView(MessageLoginRequiredMixin, FormView):
model = Article
form_class = ArticleResurrectionForm
template_name = "articles/resurrection.html"
success_url = reverse_lazy("articles:articles_main")
redirect_message = "You have to be logged in to recover articles "
def get_form_kwargs(self):
kwargs = FormView.get_form_kwargs(self)
kwargs["author_id"] = self.request.user.pk
return kwargs
def get_form_kwargs (self): должен передать self.request.user.pk как kwargs ["author_id"] в init
формы
Тогда у меня есть следующая форма для этого представления:
class ArticleResurrectionForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.author_id = kwargs.pop("author_id", None)
forms.ModelForm.__init__(self, *args, **kwargs)
title = forms.ModelMultipleChoiceField(label="Deleted articles",
help_text="Please select the article to recover",
queryset=Article.default.filter(show=False, author=???) )
# I can not use self.author_id here
Цель - использовать self.author_id из init в заголовке для фильтрации набора запросов таким способом, чтобы показывать только записисделано текущим пользователем.Другими словами, мне нужно передать self.author_id в наборе запросов в заголовке.
Возможно, это можно сделать следующим образом:
def __init__(self, *args, **kwargs):
self.author_id = kwargs.pop("author_id", None)
forms.ModelForm.__init__(self, *args, **kwargs)
self.fields[“title"].queryset = ???
В любом случае, если вы знаете, какполучить request.user в наборе запросов - я был бы рад получить ваше решение по этому вопросу.Спасибо!
ps относительно связанных менеджеров: «по умолчанию» вместо стандартных «объектов», я использую 2 менеджера:
class ArticleManager(models.Manager):
"""Shows only non deleted articles"""
def get_queryset(self):
return models.Manager.get_queryset(self).exclude(show=False)
class Article(models.Model):
# related managers
default = models.Manager() # shows all articles
objects = ArticleManager() # shows only non deleted articles
.....
.....
.....