0
私はいくつかの非常に基本的な点が欠けているように感じますが、これを解決することはできません。Django ModelFormのカスタムフィールドを追加して初期化する
class Person(models.Model):
first_name = models.CharField(max_length=256, blank=True)
# this is weird field, but needed for my usecase
last_name = models.WeirdCustomField(max_length=256, blank=True)
そして、私は少しをカスタマイズしたいと思い、このためのフォーム、(コメント)がある:
class PersonForm(forms.ModelForm):
class Meta:
model = Address
# I want to override 'last_name' field, so exclude it here
exclude = ['last_name']
# And add additional field
my_field = ChoiceField(choices=list_of_choicec)
last_name = forms.CharField()
def __init__(self, *args, **kwargs):
last_name = kwargs.pop('last_name', None)
my_field = kwargs.pop('my_field', None)
super(PersonForm, self).__init__(*args, **kwargs)
self.fields['last_name'] = last_name
self.fields['my_field'] = my_field
はshell
で、今
のは、私がこのようなモデルを持っているとしましょう(すべての輸入の後...)
person = Person.objects.get(first_name='Jacob')
person.first_name # Prints 'Jacob', correct!
form = PersonForm(instance=person, last_name='Smith', my_field='test123')
form['first_name'].value() # -> 'Jacob', that's right
form['last_name'].value() # -> nothing, I expected 'Smith'
form['my_field'].value() # -> nothing, I would like to see 'test123'
私はインターネットを非常に深く掘り下げると思いますが、この種の問題の解決策は見つかりませんでした。
驚くべきことに、近いうちに自分自身を理解するとは思わない、ありがとう!私はまた、それは非常に直観的ではないと言う必要がありますが、私はそれがフレームワークの方法だと思います。 –
あなたのinitにself.fields ['my_field']を表示してみてください。あなたはそれが何であるかを見ることができます。 –