gpt4 book ai didi

django - 根据请求更改表单字段

转载 作者:行者123 更新时间:2023-12-02 06:57:48 25 4
gpt4 key购买 nike

应用程序有一个类别字段,可以在 session 中设置,也可以不设置。如果是,我不想看到表单上的字段,只需将其作为隐藏字段,其值等于请求中的值。如果未设置,那么我想显示一个下拉列表。

我已经设置了表单以包含下拉列表,这是该字段的默认设置,我的问题是,将小部件更改为隐藏的最佳位置在哪里,请记住我需要该请求,所以我不能在 init 形式中执行此操作,这是显而易见的地方。

尝试了这种方法,但该字段仍然可见:

class DocForm(forms.ModelForm):


class Meta:
model = Document
fields = __all__
widgets = {"creator": forms.HiddenInput(),}

def __init__(self, *args, **kwargs):
#cant do it here because don't have request

class DocAddView(CreateView):


form_class = DocForm


def get_form_class(self):
form_class = super(DocAddView, self).get_form_class()
form_class.Meta.widgets['category'] = forms.HiddenInput()
return form_class

最佳答案

更改表单的 __init__ 方法以获取请求对象。

class DocForm(forms.ModelForm):
...
def __init__(self, request, *args, **kwargs):
super(DocForm, self).__init__(*args, **kwargs)
use_hidden_input = do_something_with_request(request)
if use_hidden_input:
self.fields['category'].widget = forms.HiddenInput()

然后覆盖get_form_kwargs ,以便 View 将请求传递给表单。

class DocAddView(CreateView):
...
def get_form_kwargs(self):
# grab the current set of form #kwargs
kwargs = super(DocAddView, self).get_form_kwargs()
# Update the kwargs with the user_id
kwargs['request'] = self.request
return kwargs

此方法在this blog post中进行了解释。 .

关于django - 根据请求更改表单字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31204710/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com