从一个Formfield计算多个modelField

时间:2016-10-10 12:23:58

标签: python django modelform

我需要从一个FormField中提取多个ModelField值。我应该在哪里这样做?在clean_<field>函数? cleaned_data突变?表单__init__功能?在model.saveform.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?

1 个答案:

答案 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