2013-04-03 92 views
47

所以我有我的TagStatus模型。我正在爲它製作一個ModelForm。但是,我的表單要求隱藏的輸入填充{{tag.name}}。我一直在查看文檔,我不知道如何使標籤字段成爲隱藏輸入。也許ModelForm不是要走的路?Django 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和一個然後通過模板填充它?

+0

你有什麼問題? – 2013-04-03 19:10:13

回答

89

要使ModelField中的字段成爲隱藏字段,請使用HiddenInput小部件。 ModelForm爲所有字段使用合理的默認小部件,只需在構建對象時重寫它即可。

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

有3點可能的方式(據我所知)來渲染隱藏字段在Django -

你可以聲明通常forms.py,但在你的模板HTML文件中使用{{ form.field.as_hidden }}

2場。 in forms.py直接使用隱藏的輸入小部件。

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

一旦你做出領域隱藏的輸入,你可以填充字段的模板值。現在您的隱藏字段已準備好進行渲染。

3.定期表格等效(感謝@Modelesq分享此金塊)。這裏沒有涉及Django。更改是在HTML模板級完成的。 <input type="hidden" name="tag" value="{{ tag.name }}" />

+10

我如何去填充它?它的常規形式相當於:'' – Modelesq 2013-04-03 19:12:47

+0

是的,這將工作... – 2013-04-04 02:07:25

+0

您是否發現如何填充?使用'{{tag.name}}'似乎不起作用。我自己需要'{{forloop.counter}}'... – Ehvince 2014-06-25 16:16:07