3

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

我看到它的方式是在init或 save 函数中,我尝试使用 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'
4

2 回答 2

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()
于 2013-04-22T17:15:04.217 回答
2

你得到这个错误是因为你会尝试fieldsself不调用__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()
于 2013-04-22T17:19:24.560 回答