通过Create View处理ModelForm中添加字段的数据

时间:2013-07-20 13:25:42

标签: python django

我想做的是这样的事情:

1)我创建了模型

class Example(models.Model):

     username = models.CharField(max_lenght=111)
     pass = models.CharField(max_lenght=111)

2)我使用ModelForm创建了表单,并添加了一个额外的字段

class ExampleForm(ModelForm):

    extra_field= form.CharField(max_length=333)

    class Meta:
        model = Client
        fields = ['username', 'pass']

3)我已创建视图来处理此表单

class Registration(CreateView):
    """
    View handles user registration.
    """
    form_class = ExampleForm
    model = Example
    template_name = 'accounts/registration.html'
    success_url = reverse_lazy('accounts:registered')

现在我想做的是对extra_field进行一些自定义处理。我想出这应该在ExampleForm的save方法中完成。例如:

 def save(self, commit=True):

        user = super(ExampleForm, self).save(commit=False)
        data = self.cleaned_data['extra_field']
        user.set_password(self.cleaned_data['pass'] + self.cleaned_data['extra_field'])

        if commit:
            user.save()
        return user

但这不起作用。 这是处理这种情况的正确方法,还是有更好的方法? 最大的问题是这不是我的代码,所以我应该只更改ExampleForm。 有办法做到这一点吗?

提前致谢。

最诚挚的问候, 尼古拉

1 个答案:

答案 0 :(得分:1)

您可以使用form_valid()的{​​{1}}方法执行此操作。

CreateView