应用程序有一个类别字段,可以在会话中设置,也可以不设置。如果是,我不想看到表单上的字段,只需将其作为隐藏字段,其值等于请求中的值。如果未设置,那么我想显示一个下拉菜单。
我已经设置了表单以包含下拉列表,这是该字段的默认设置,我的问题是,将小部件更改为隐藏的最佳位置在哪里,请记住我需要该请求,因此我无法在表格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 https://docs.djangoproject.com/en/1.8/ref/class-based-views/mixins-editing/#django.views.generic.edit.FormMixin.get_form_kwargs,以便视图将请求传递给表单。
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
这种方法的解释见这篇博文 http://www.pydanny.com/adding-django-form-instance-attributes.html.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)