2012-08-16 16 views
7

私はModelFormsを使ってWebサイトのフォームを作成していますが、Selectボックスに表示されるテキストをより詳細に制御したいと思っています。Djangoの選択フォームフィールドのラベル

モデル例は、の主キーを持っている私は、このモデルののModelFormを作るときに、私の問題があり、外部キーフィールドを選択フィールドに行われていることを、この

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

、のようになります。基になる値のオブジェクト、および表示されるテキストは、オブジェクト__unicode__()メソッドのテキストです。この場合、プロダクトIDのみが表示されます(これはシリアルコード番号であり、ユーザーには分かりません)。私は "[シリアル]、[製品名]"のようなカスタムラベルを作成したいと考えています。

私は公式のDjangoのドキュメントで何か指摘を見つけることができないので、誰かが助けてくれるのだろうかと思ったのですか? :)

+0

あなたが期待いただきまし表示するには、 'モデルの__unicode__'方法を変更することができませんか? – Rohan

+0

これは明らかな解決策ですが、ユニコード方法はウェブサイト全体で多く使用されています。この方法では、シリアルを表示することが重要です。だからそれはオプションではない、私は恐れている – Eldamir

答えて

7

Django docs regarding the ModelChoiceFieldをチェックしてください。引用:

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

class MyModelChoiceField(ModelChoiceField): 
    def label_from_instance(self, obj): 
     return "My Object #%i" % obj.id 
+0

それは動作するかもしれない何かのように見えます。私はそれをチェックします – Eldamir

+0

それは素晴らしく働いた。ありがとう – Eldamir

関連する問題