Django ModelForm有一个隐藏的input

所以我有我的TagStatus模型。 我正在试图为它做一个ModelForm。 不过,我的表单要求用{{tag.name}}填充隐藏的input。 我一直在查看文档,我不知道如何使标签字段成为隐藏的input。 也许ModelForm不是要走的路?

models.py:

class TagStatus(models.Model): user = models.ForeignKey(User, null=True, unique=True) status = models.CharField(max_length=2, choices=tag_statuses) tag = models.ForeignKey(Tag, null=True, blank=True) def __unicode__(self): return self.status def save(self, *args, **kwargs): super(TagStatus, self).save(*args, **kwargs) class TagStatusForm(modelForm): class Meta: model = TagStatus fields = ('status','tag') widgets = { 'select': Select, 'tag': ??? } 

django views.py:

 @login_required def tags(request): all_tags = Tag.objects.all() context = base_context(request) if request.method == 'POST': if 'status_check' in request.POST: status_form = TagStatusForm(request.POST) #if request.is_ajax(): if status_form.is_valid(): status_form.save() response = simplejson.dumps({"status": "Successfully changed status"}) else: response = simplejson.dumps({"status": "Error"}) return HttpResponse (response, mimetype='application/json') status_form = TagStatusForm() context['status_form'] = status_form context['all_tags'] = all_tags return render_to_response('tags/tags.html', context, context_instance=RequestContext(request)) 

模板:

 {% for tag in all_tags %} .... <form class="nice" id="status-form" method="POST" action=""> {% csrf_token %} <input type="hidden" name="status_check" /> <input type='hidden' name="tag" value="{{ tag.name }}" /> {{ status_form.status }} </form> ... {% endfor %} 

我将如何去通过django ModelForm做一个隐藏的input,然后通过模板填充它?

要将ModelField中的字段设置为隐藏字段,请使用HiddenInput小部件。 ModelForm为所有字段使用了一个合理的默认小部件,只需要在构build对象时重写它。

 class TagStatusForm(forms.ModelForm): class Meta: model = TagStatus widgets = {'tag': forms.HiddenInput()} 

有三种可能的方式(AFAIK)在Django中渲染隐藏的字段 –

1.您可以在forms.py中正常声明一个字段,但在模板html文件中使用{{ form.field.as_hidden }}

2.forms.py直接使用隐藏的input小部件。

 class MyForm(forms.Form): hidden_field = forms.CharField(widget=forms.HiddenInput()) 

一旦您将该字段设置为隐藏input,您可以在模板中填充该字段的值。 现在,您的隐藏字段已准备好进行渲染。

3.相当于常规表格(感谢@Modelesq分享这个金块)。 这里没有涉及到Django。 更改是在HTML模板级完成的。 <input type="hidden" name="tag" value="{{ tag.name }}" />