2016-11-29 8 views
1

私はよくある状況だと思っていますが、その周りに頭を浮かべているようには見えません。私はdjango.forms.inlineformset_factoryを使用して、ユーザが外部キーオブジェクトのアスペクトを変更することを可能にするフォームのフォームセットを作成し、これらはうまく動作しています。djangoインラインフォームセット内でフォームインスタンスにラベルを付けるにはどうすればいいですか?

問題は、これらのフォームをformset内にラベル付けできるようにすることです(各フォーム内のフィールドではなく、各フォームの基になる外部キーモデルに注意してください)。私はドキュメントの例を微調整する場合たとえば、:

from django.db import models 
from django.forms import inlineformset_factory 

class Author(models.Model): 
    name = models.CharField(max_length=100) 

class Book(models.Model): 
    author = models.ForeignKey(Author, on_delete=models.CASCADE) 
    title = models.CharField(max_length=100) 
    pages = models.IntegerField(default=0) 

私は人々がダフィー・ダックによって任意の本のページ数を変更することができるように私のフォームセットを作成します。

BookFormSet = inlineformset_factory(Author, Book, fields=('pages',)) 
author = Author.objects.get(name='Daffy Duck') 
formset = BookFormSet(instance=author) 

ダフィーが書かれていセイ5冊の本があり、これらはすべて「ブック」というラベルの付いた整数エントリとして表示され、各ブックの参照先はありません。どのように変更しているのかを知るために、フォームに書籍のタイトルをどのように付けることができますか?私は、inlineformset_factory関数のlabelsフィールドに辞書を渡そうとしましたが、機能しませんでした。

答えて

1

最初に、インラインformsetはモデルのformsetを囲む小さなラッパーであることに注意してください。後者に当てはまるもののほとんどは前者に当てはまります。また、モデル・フォームセットは、それぞれがモデルのインスタンスに関連する一連のフォームを提示する方法です。ですから、あなたは一度にいくつかのレベルの抽象化について考えようとしています。

次に、フォームセットをレンダリングするために、独自のテンプレートを書いて説明し、「Using a formset in views and templates」のドキュメントを参照してください。あなたは、各フォームにラベルを付けたいのであれば

<form method="post" action=""> 
    {{ formset.management_form }} 
    <table> 
     {% for form in formset %} 
     {{ form }} 
     {% endfor %} 
    </table> 
</form> 

を - それぞれが1を説明ModelForm自身であることを思い出しモデルのインスタンス - あなたは{% for %}ブロック内でそのフォームへのアクセス権を持っている:高速な応答@bignoseため

<form method="post" action=""> 
    {{ formset.management_form }} 
    <table> 
     {% for form in formset %} 
     <tr><th>{{ form.instance.foo_field }}</th></tr> 
     {{ form }} 
     {% endfor %} 
    </table> 
</form> 
+0

感謝を!申し訳ありませんが、私はwhatever_attribute_you_likeをどのように割り当てるのですか?私は中間のフォームを指定せずにデフォルトのinlineformset_factoryを使用しています。私のテンプレートの '{{form.title}}' – keri

関連する問題