Django:__ init__中的Form类的访问和更新字段或保存函数

时间:2013-04-22 16:35:28

标签: python django django-models django-forms

我有MyModel模型类的MyModelForm表单类,我想为某个字段生成一个随机值。

我看到它的方式是在 init 或保存函数中,我尝试使用self.fields ['randfield'],但它会抛出错误'MyModelForm' object has no attribute 'fields'

如何访问和更新表单类中的字段,以便我可以使用随机值对其进行实例化?

感谢。

编辑:使用self.fields['randint'].initial后,我收到了一个KeyError。代码是

好的,这里有:

def __init__(self, instance=None, *args, **kwargs):
    _fields = ('username', 'email')
    _initial = model_to_dict(instance.user, _fields) if instance is not None else {}
    super(UserDetailsForm, self).__init__(initial=_initial, instance=instance, *args, **kwargs) 
    self.fields.update(fields_for_model(User, _fields))
    self.fields['randint'].initial = '987654321'

2 个答案:

答案 0 :(得分:4)

使用类似的东西:

class RandomValueForm(ModelForm):
    myfield = models.IntegerField(default=0)

    def __init__(self, *args, **kwargs):
        super(RandomValueForm, self).__init__(*args, **kwargs)
        self.fields['myfield'].initial = my_random_generator()

答案 1 :(得分:2)

您收到此错误是因为您尝试在fields上访问self而未调用超级类的__init__。因此,首先您需要调用ModelForm的超类__init__,即__init__,然后才能访问fields

class MyModelForm(ModelForm):

    def __init__(self, *args, **kwargs):
        super(MyModelForm, self).__init__(*args, **kwargs)
        self.fields['myfield'].initial = my_random_number()