10

ModelForms を使用して Web サイトのフォームを作成していますが、[選択] ボックスに表示されるテキストをより詳細に制御したいと考えています。

モデルの例は次のようになります

class Test(models.Model)
    ID = IntegerField()
    Label = CharacterField()
    recipient = ForeignKey(Person)
    product = ForeignKey(Product)

したがって、私の問題は、このモデルのmodelFormを作成すると、外部キーフィールドが選択フィールドになり、基になる値にオブジェクトの主キーがあり、表示されるテキストがオブジェクト__unicode__()メソッドからのテキストになることです。 . この場合、製品 ID のみが表示されます (これはシリアル コード番号であり、ユーザーには意味がありません)。「【シリアル】、【商品名】」のようなカスタムラベルを作れるようになりたいです。

Django の公式ドキュメントにヒントが見つからないようです。:)

4

1 に答える 1

10

ModelChoiceField に関する Django ドキュメントを確認してください。見積もり:

モデルの__unicode__メソッドが呼び出され、フィールドの選択肢で使用するオブジェクトの文字列表現が生成されます。カスタマイズされた表現を提供するには、ModelChoiceField をサブクラス化し、label_from_instance をオーバーライドします。このメソッドはモデル オブジェクトを受け取り、それを表すのに適した文字列を返す必要があります。例えば:

class MyModelChoiceField(ModelChoiceField):
    def label_from_instance(self, obj):
        return "My Object #%i" % obj.id
于 2012-08-16T06:31:11.990 に答える