の選択肢を変更する方法:さんは、私はいくつかの不自然なモデルがあるとしましょうModelMultipleChoiceField
class Author(Model):
name = CharField()
class Book(Model):
title = CharField()
author = ForeignKey(Author)
をとの私は本のためのModelFormを使用したいとしましょう:
class BookForm(ModelForm):
class Meta:
model = Book
シンプルなこれまでに。しかし、私のデータベースには1トンの著者がいますが、私はそのような長い選択肢のフィールドを望んでいません。だから、ブックフォームのModelMultipleChoiceField作成者フィールドでクエリーセットを制限することをお勧めします。私が望むクエリーセットは、渡される引数に依存するので、__init__
まで選択することはできません。それはちょうど私がここではないでしょう働いていた場合、もちろん
class BookForm(ModelForm):
class Meta:
model = Book
def __init__(self, letter):
# returns the queryset based on the letter
choices = getChoices(letter)
self.author.queryset = choices
:それはトリックを行う可能性がありますように
これがそうです。それは私にAttributeErrorを取得します。 'BookForm'オブジェクトには属性 'author'がありません。同じ結果を生成する
class BookForm(ModelForm):
author = ModelMultipleChoiceField(queryset=Author.objects.all())
class Meta:
model = Book
def __init__(self, letter):
choices = getChoices(letter)
self.author.queryset = choices
:だから、私はまた、私はのModelFormのデフォルトのフィールドを無効にし、後でそれを設定しようと、このような何かを、試してみました。
これはどのように行われるのですか?属性は、あなたが辞書である「フィールド」属性に見る必要があるよう
ええ、私の本当の問題領域はスーパークラスの呼び出しを持っていますが、この例ではスキップしました。 – Brian
十分に公正。私はこれを参照のためにこの質問にさまよっている人のために残しておきます。 –
間違いなく。フィールドへのアクセスの前にsuper().__ init __()を実行する必要があることが重要です。 – Brian