モデルの管理フォームをオーバーライドしてchoices
、ForeignKey
フィールドを変更しています。管理フォームで選択肢を選択して保存すると、次のようになりますValueError
。
Cannot assign "u'6'": "MyModel1.mymodel2" must be a "MyModel2" instance
6
選択した選択肢の ID です。
新しいchoices
ものは として構築され((<choice_1_id>, <choice_1_label>), (<choice_2_id>, <choice_2_label>),...)
、レンダリングされた選択ウィジェットに対して、変更しない場合と同じ html を取得しますchoices
(もちろん順序は別として)。
コメントself.fields['mymodel2'] = forms.ChoiceField(choices=choices)
しMyModel1AdminForm.__init__()
てもエラーになりません...
誰でも助けることができますか?
models.py
class MyModel1(models.Model):
mymodel2 = ForeignKey(MyModel2)
# more fields...
admin.py
class MyModel1AdminForm(forms.ModelForm):
class Meta:
model = MyModel1
def __init__(self, *args, **kwargs):
super(MyModel1AdminForm, self).__init__(*args, **kwargs)
# create choices with ((<choice_1_id>, <choice_1_label>), (<choice_2_id>, <choice_2_label>),...)
self.fields['mymodel2'] = forms.ChoiceField(choices=choices, widget=SelectWithDisabled) # http://djangosnippets.org/snippets/2453/
class MyModel1Admin(admin.ModelAdmin):
form = MyModel1AdminForm
my_site.register(MyModel1, MyModel1Admin)