2016-05-10 8 views
0

私はdjango 1.9でモデルフォームを使用していますが、ウィジェットがyesの間はラベルマークは生成されません。理由は分かりませんが、何かが間違っています。進歩でDjangoモデルフォームのラベルが機能しない

よろしく、

これはPYファイル:

model.py:

class Account(models.Model): 
    pseudo = models.CharField(_('pseudo'), max_length=100) 
    password = models.CharField(_('password'), max_length=42) 
    email = models.EmailField(_('email'), null=True) 
    def __str__(self): 
     return self.pseudo 

form.py:

class AccountForm(forms.ModelForm): 
    class Meta: 
     model = Account 
     fields = ('pseudo', 'password', 'email') 
     labels = { 
      'pseudo': _('Pseudo'), 
      'password': _('Password'), 
      'email': _('Email'), 
     } 
     widgets = { 
      'pseudo': forms.TextInput(attrs={ 
       'class': 'form-control', 
      }), 
      'password': forms.PasswordInput(attrs={ 
       'class': 'form-control', 
      }), 
      'email': forms.EmailInput(attrs={ 
       'class': 'form-control', 
      }), 
     } 

view.py:

def signup(request): 
    AccountFormSet = AccountForm() 
    if request.method == 'POST': 
     if AccountFormSet.is_valid(): 
      AccountFormSet.save() 
    return render(request, 'account/signup.html', {'formset': AccountFormSet}) 

signup.html:

{% for form in formset %} 
    <div class="row"> 
     <div class="form-group"> 
     {{ form }} 
     </div> 
    </div> 
{% endfor %} 

出力は次のとおりです。

<input class="form-control" id="id_pseudo" maxlength="100" name="pseudo" type="text"> 
<input class="form-control" id="id_password" maxlength="42" name="password" type="password"> 
<input class="form-control" id="id_email" maxlength="254" name="email" type="email"> 

答えて

3

のために削除します。あなたはフォームセットを参照していますが、どこでもフォームセットを使用していません。

def signup(request): 
    form = AccountForm() 
    if request.method == 'POST': 
     if form.is_valid(): 
      form.save() 
    return render(request, 'account/signup.html', {'form': form}) 

は、その後、あなたのテンプレートでは、フォームのフィールドをループしているので、そこにも変数を変更します。私は次のようにビューを変更することを示唆しています。

ラベルタグを含める場合は、明示的に{{ field.label_tag }}を含める必要があります。 {{ field.errors }}も含めることをお勧めします。たとえば:

{% for field in form %} 
    <div class="row"> 
    <div class="form-group"> 
     {{ field.errors }} 
     {{ field.label_tag }} 
     {{ field }} 
    </div> 
    </div> 
{% endfor %} 

は、詳細はrendering fields manually上のドキュメントを参照してください。

+0

ありがとうございます! –

1

あなたは変数form_set呼ばれてきた一方で、それは実際にフォームセット、そのまだちょうどあなたの単一のフォームではありません。

AccountFormSet = AccountForm() 

フォームの反復処理ではないので、フォームのイテレータはフィールドを反復処理します。あなたの変数名が混乱しているので、どちらかは、ラベルを含めるか、単にループ

{% for field in formset %} 
    <div class="row"> 
     <div class="form-group"> 
     {{ field.label_tag }} 
     {{ field }} 
     </div> 
    </div> 
{% endfor %} 
<div class="row"> 
     <div class="form-group"> 
      <form>{{ form }}</form> 
     </div> 
    </div> 
関連する問題