6

私はDjangoでいくつかのフォームに取り組んでいます。1つのフィールドはForeignKeyモデル内のaであるためModelChoiceField、フォームではaとして表されます。現在、モデルModelChoiceFieldのメソッドを使用し__unicode__てリストにデータを入力していますが、これは私の望ましい動作ではありません。モデルの別の方法を使用できるようにしたいと思います。ドキュメントから、私は自分自身を強制することができるように見えますがQuerySet、これが私が以外の方法を使用するのにどのように役立つかわかりません__unicode__

可能であれば、これをデフォルトのフォームメソッドから切り離すことは避けたいと思います。

助言がありますか?

4

2 に答える 2

10

オーバーライドlabel_from_instanceして、別のメソッドを指定できます。

from django.forms.models import ModelChoiceField

class MyModelChoiceField(ModelChoiceField):

    def label_from_instance(self, obj):
        return obj.my_custom_method()

代わりに、このフィールドをフォームで使用できます。このメソッドは、サブクラスでオーバーライドされることを意図しています。の元のソースは次のdjango.forms.modelsとおりです。

# this method will be used to create object labels by the QuerySetIterator.
# Override it to customize the label.
def label_from_instance(self, obj):
    """
    This method is used to convert objects into strings; it's used to
    generate the labels for the choices presented by this object. Subclasses
    can override this method to customize the display of the choices.
    """
    return smart_unicode(obj)
于 2012-07-11T16:36:37.017 に答える
1

カスタムクエリセットではなく、クエリセットをリストに変換します。choices=some_querysetDjango は次の形式で選択を行います。

(item.pk, item.__unicode__())

したがって、リスト内包表記を使用して自分で実行してください。

choices=[(item.pk, item.some_other_method()) for item in some_queryset]
于 2012-07-11T16:34:25.240 に答える