【发布时间】:2019-09-29 16:01:33
【问题描述】:
我想将 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
目标是在标题中使用 init 中的 self.author_id 来过滤查询集,以显示仅由当前用户创建的条目。换句话说,我需要在 title 的查询集中传递 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 - 我很乐意为您提供解决方案。 谢谢!
关于相关管理器的 p.s:“默认”而不是标准“对象”,我使用 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
.....
.....
.....
【问题讨论】:
标签: django django-forms