我需要从一个FormField中提取多个ModelField值。我应该在哪里这样做?在clean_<field>
函数? cleaned_data
突变?表单__init__
功能?在model.save
或form.save
函数?
模型:
def normalize_name(name):
# some code
return name
class MyModel(models.Model):
name = models.CharField(max_length=250)
normalize_name = models.CharField(max_length=250, unique=True)
形式:
class MyForm(forms.ModelForm):
class Meta:
model = MyModel
fields = ('name',) # or normalize_name? or both?
答案 0 :(得分:0)
根据你的评论,我会在save()
函数中执行这些操作。
__init__(self)
,因此它无法对属性执行任何操作。
从理论上讲,clean_name
可以起作用(在我看来),但应该用于验证。
在验证save()
属性后调用name
方法,以便获取name
并使用它做一些事情(normalize_name(name))
def save(self, user, *args, **kwargs):
name = self.cleaned_data['name']
self.instance.normalized_name = normalize_name(name)
return super(YourFormClass, self).save(*args, **kwargs)
如果您的意思是使用normalized_name
生成name
并且表单在normalized_name
满足某些条件时有效,请在clean_name(self)中执行。
def clean_name(self):
name = self.cleaned_data['name']
normalized_name = normalize(name)
if not validate(normalized_name):
raise ValidationError("Something is wrong)
return name