我希望将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“传递给form的初始化
对于这个视图,我有以下形式:
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,以这种方式过滤查询集,以显示仅由当前用户创建的条目。换句话说,我需要在标题中的查询集中传递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放入查询集中--我很乐意得到你的解决方案。谢谢!
关于相关的管理器:"default“而不是标准的"objects",我使用了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
.....
.....
.....
发布于 2021-05-22 09:14:07
将request.user添加到表单实例
form = FormItemForm(request.POST or None, request.user)
然后在您的form.py中添加以下内容
field = forms.ModelMultipleChoiceField(
widget=forms.CheckboxSelectMultiple,
queryset=Field.objects.none(),
label='Fields',
help_text='Please select a field.'
)
def __init__(self, *args, **kwargs):
us = args[1] or None
forms.ModelForm.__init__(self, *args, **kwargs)
self.fields['field'].queryset = Field.objects.filter(user=us)
试一试,看看它是否有效。它对我来说效果很好。
https://stackoverflow.com/questions/56099703
复制相似问题