に新しいフォームフィールドを追加し、管理インターフェースで使用されるフォームのために、(私はこのblog postを使用しました)フィールドが私の管理フォームに表示されません!それは管理者の仕事の仕方に関連する問題でしょうか?またはModelFormに?私は動的に新しいフォームフィールドを追加しようとしています動的に管理
ありがとうございました!
セバスチャン・
PS:私は
に新しいフォームフィールドを追加し、管理インターフェースで使用されるフォームのために、(私はこのblog postを使用しました)フィールドが私の管理フォームに表示されません!それは管理者の仕事の仕方に関連する問題でしょうか?またはModelFormに?私は動的に新しいフォームフィールドを追加しようとしています動的に管理
ありがとうございました!
セバスチャン・
PS:私は
テンプレートでフォームをレンダリングするとき、フィールドセットではなくフィールドセットから列挙するフィールドがフィールドからではなくなります。もちろん、AdminFormのフィールドセットを再定義することはできますが、元のフォームクラスにこのようなフィールドがないため、検証は失敗します。私が提案できる1つの回避策は、フォーム定義でこのフィールドを静的に定義し、そのフィールドをフォームののinitメソッドで動的に再定義することです。次に例を示します。
3210ジャンゴ1.3を使用しています私は実際に私は、現時点でて働いている同じ問題を持っています。 理想的ではありませんが、私の使用事例で機能する一時的な回避策が見つかりました。それはあなたの役に立つかもしれませんか?
私の場合、フィールドの静的な名前があるので、ModelFormで宣言しました。通常通り、の()を上書きして、いくつかのオプションをオーバーライドします。
すなわち:私は前に述べたように
def statemachine_form(for_model=None):
"""
Factory function to create a special case form
"""
class _StateMachineBaseModelForm(forms.ModelForm):
_sm_action = forms.ChoiceField(choices=[], label="Take Action")
class Meta:
model = for_model
def __init__(self, *args, **kwargs):
super(_StateMachineBaseModelForm, self).__init__(*args, **kwargs)
actions = (('', '-----------'),)
for action in self.instance.sm_state_actions():
actions += ((action, action),)
self.fields['_sm_action'] = forms.ChoiceField(choices=actions,
label="Take Action")
if for_model: return _StateMachineBaseModelForm
class ContentItemAdmin(admin.ModelAdmin):
form = statemachine_form(for_model=ContentItem)
は今、これは完全に「動的」ではありませんが、これは当分の間、私のために尽くします。
フィールドを動的に追加すると、最初に宣言しなくても実際には存在しないという同じ問題があります。これは実際には、ModelFormがフィールドを作成する方法と関係があると思います。
私は他の誰かが私たちにいくつかの情報を与えることを望んでいます。
はでsuper.initを呼び出す前に、フィールドを追加してください:
def __init__(self, *args, **kwargs):
self.fields['test'] = forms.CharField(label='test')
super(ServiceRoleAssignmentForm, self).__init__(*args, **kwargs)
fields属性は、フォーム上でsuperを呼び出すまで存在しません。 –
答えをありがとう!私は実際にそれをやろうと考えていました...しかし、私はこの部分をフィールドからではなく、fieldsets変数から列挙するフィールドにしませんでした。あなたはAdminFormのフィールドセットを再定義できますか?そのfieldsets変数は何ですか?あなたは、すべてのフィールドを含む "fields"変数と、それらのレンダリングに使用される "fieldsets"があることを意味しますか?その場合、なぜ新しいフィールドを「フィールドセット」と「フィールド」の両方に追加しないのですか? – sebpiq
テンプレートを見てください。テンプレートをオーバーライドする(または既にオーバーライドしている場合は更新する)こともできます。 –