У меня есть фабричный метод, который генерирует классы форм django, например:
def get_indicator_form(indicator, patient):
class IndicatorForm(forms.Form):
#These don't work!
indicator_id = forms.IntegerField(initial=indicator.id, widget=forms.HiddenInput())
patient_id = forms.IntegerField(initial=patient.id, widget=forms.HiddenInput())
def __init__(self, *args, **kwargs):
forms.Form.__init__(self, *args, **kwargs)
self.indicator = indicator
self.patient = patient
#These do!
setattr(IndicatorForm, 'indicator_id', forms.IntegerField(initial=indicator.id, widget=forms.HiddenInput()))
setattr(IndicatorForm, 'patient_id', forms.IntegerField(initial=patient.id, widget=forms.HiddenInput()))
for field in indicator.indicatorfield_set.all():
setattr(IndicatorForm, field.name, copy(field.get_field_type()))
return type('IndicatorForm', (forms.Form,), dict(IndicatorForm.__dict__))
Я пытаюсь понять, почему объявления полей верхней формы не работают, но метод setattr ниже работает. Я довольно плохо знаком с Python, поэтому я подозреваю, что это какая-то языковая особенность, которую я неправильно понимаю. Можете ли вы помочь мне понять, почему объявления полей в верхней части класса не добавляют поля в класс?
В возможно связанной записке, когда создаются эти классы, instance.media
ничего не возвращает, даже если в некоторых полях есть виджеты со связанным носителем.
Спасибо,
Пит