2016-10-29 11 views
1

私はチュートリアルやその他のよくある質問に従っていて、modelformset_factoryにはhtmlのようなフォームのリストが表示されていますが、実際のフォームではないことがわかりました。表示されますdjango modelformset_factoryには実際のフォームが含まれていません

HTML:

<div ='container'> 

     <div class='row'><tr><th><label for="id_form-0-config_key">Config key:</label></th><td><input id="id_form-0-config_key" maxlength="63" name="form-0-config_key" type="text" value="ClientMustVerify" /></td></tr> 
<tr><th><label for="id_form-0-config_value">Config value:</label></th><td><input id="id_form-0-config_value" maxlength="63" name="form-0-config_value" type="text" value="TRUE" /><input id="id_form-0-id" name="form-0-id" type="hidden" value="3" /></td></tr> <input type="submit" value="Update" /></div> 

     <div class='row'><tr><th><label for="id_form-1-config_key">Config key:</label></th><td><input id="id_form-1-config_key" maxlength="63" name="form-1-config_key" type="text" value="Auditing" /></td></tr> 
<tr><th><label for="id_form-1-config_value">Config value:</label></th><td><input id="id_form-1-config_value" maxlength="63" name="form-1-config_value" type="text" value="FALSE" /><input id="id_form-1-id" name="form-1-id" type="hidden" value="4" /></td></tr> <input type="submit" value="Update" /></div> 

    <div> 

通知はどこにもformタグはありません。後方作業、ここではテンプレートからの抜粋です:

<div ='container'> 
    {% for form in formset %} 
     <div class='row'>{{form}} <input type="submit" value="Update" /></div> 
    {% endfor %} 
<div> 

はい、私は手動でこれらの作業を取得することを望んsubmitボタンを追加しましたが、もちろんformタグが存在しない場合、その後、submitボタンは」勝ちました何もしない。 views.py:

from limbo.models import serverConfig 
from django.forms import modelformset_factory 
from django.forms import formset_factory 

def editServer(request): 
    result = serverConfig.objects.values() 
    myConfigs = [entry for entry in result] 

    finalFormSet = modelformset_factory(serverConfig, exclude=('id',), extra=0) 
#other lines 
    return render(request, 'limboHtml/ServerConfiguration.html', {'formset': finalFormSet, 'SubmitMessage': '', 'CurrentConfigs': myConfigs}) 

forms.py:

class serverForm(ModelForm): 
    class Meta: 
     model = serverConfig 
     fields = ['config_key', 'config_value'] 
    def __init__(self, *args, **kwargs): 
     super(serverForm, self).__init__(*args, **kwargs) 
     instance = getattr(self, 'instance', None) 
     if instance and instance.pk: 
      self.fields['config_key'].widget.attrs['readonly'] = True 
      self.fields['config_key'].widget.attrs['disabled'] = True 

とmodels.py:

class serverConfig(models.Model): 

    config_key = models.CharField(max_length=63) 
    config_value = models.CharField(max_length=63) 

私は1つの点でfinalFormSet = formset_factory(serverForm, extra=0)を使用してみましたが、その後、私はちょうど何のコンテンツを持っていませんhtmlの...

+0

私はちょうど '

{%csrf_token%}'を '{{form}}'の前に手動で追加して、 '
'を追加していますが、途中で... – Keith

答えて

1

formset documentionに記載されているとおり、タグを手動で入力します。これは、単一のフォームを表示するときとはあまり変わりありません。

あなたはフォームセットを繰り返して表示しているようです。つまり、管理フォームを追加する必要があります。

<form method="post" action=""> 
    {{ formset.management_form }} 
    <div ='container'> 
     {% for form in formset %} 
      <div class='row'>{{form}} <input type="submit" value="Update" /></div> 
     {% endfor %} 
    <div> 
</form> 

また、管理フォームが見つからないか誤って設定されているとエラーが発生します。

+0

ありがとう、明らかに私はドキュメントのその部分を逃した。私はそれがフォームタグを表示し、より簡単なフォームで自動的に提出するのを見ていたので、私は(常に悪い)これは似ていると仮定していたと思います。 – Keith

1

タグまたは送信ボタンは含まれないことに注意してください。それらのテンプレートをテンプレートに提供する必要があります。

続きを読む:論理的な観点から、フォームの検証はどこでもあなたのアプリケーションで処理することができるので、あなたが<form>タグを取得されていませんWorking with Forms: Building a form in Django

理由があります。そのため、フォームURLを明示的に指定する必要があります(reverse(view_name)を使用するのに適しています)、メソッドおよびその他のパラメータ。

関連する問題