我有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'
答案 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()