Ich fühle mich wie ich einige sehr grundlegende Punkt fehlt, kann aber das nicht lösen.
Lassen Sie uns sagen, ich habe Modell wie dieses:Hinzufügen und initialisieren benutzerdefiniertes Feld in 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)
Und es ist eine Form für das, was Ich mag würde ein bisschen (Kommentare) anzupassen:
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
Jetzt in der shell
, (nach allen Importen ...)
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'
Ich denke, ich graben Internet sehr tief, aber konnte keine Lösungen für diese Art von Problem finden.
Erstaunlich, ich glaube nicht, dass ich es in naher Zukunft selbst herausfinden würde, danke! Ich muss auch sagen, es ist ziemlich kontra intuitiv, aber ich denke, es ist der Rahmen Weg. –
versuchen Sie, self.fields ['my_field'] in Ihrem init zu drucken. Sie können sehen, was es ist. –