2017-11-15 17 views
1

私はdjangoを初めて使っています。私form.pyに次のコードで 見て:私の形でdjangoはフォームをレンダリングできません

class ProfileForm(forms.Form): 
    name = forms.CharField(label=_("first name")) 
    lname = forms.CharField(label=_("last name")) 
    phone= forms.CharField(label=_("phone")) 
    address = forms.CharField(label=_("address")) 

    def categorize_fields(self): 
     categorized_fields = [ 
     [ self.fields["name"], self.fields["lname"] ] , 
     [ self.fields["phone"], self.fields["address"] ] 
     ] 
     return categorized_fields 

私は正常に動作しない、次のコードを持っているレンダリング:

{% for field_set in form.categorize_fields %} 
     {% for field in field_set %} 
      {{ field.label }} 
      {{ field }} 
     {% endfor %} 
{% endfor %} 

field.labelが正しく動作しているが、{{ field }}が表示されていませんHTMLはレンダリングされ、代わりにこれを示しています:

<django.forms.fields.CharField object at 0x000012661591CA90> 

しかし、私はメインフォームを繰り返し、form_ren der.html、すべて正常に動作します:

{% for field in form.visible_fields %} 
     {{ field.label_tag }} 
     {{ field }} 
    {% endfor %} 

どのように解決できますか? ありがとう

答えて

1

self.fieldsには、バインドされていないフィールドオブジェクトへの参照が含まれています。あなたは、実際のバインドフィールドへのアクセスが必要な場合は、直接self上のインデックスに必要があります。

categorized_fields = [ 
    [ self["name"], self["lname"] ] , 
    [ self["phone"], self["address"] ] 
] 

しかし、私はこれを行うことはお勧めしません。代わりに、django-crispy-formsのようなサードパーティのライブラリを使用してください。

+0

ありがとう –

関連する問題