Django编辑个人资料

时间:2013-02-26 15:40:36

标签: python django

我想做以下事情: - 允许网站用户在表单中编辑其电子邮件地址。 - 如果他们的电子邮件已经存在于数据库中,只要他们输入的电子邮件属于他人以外的其他人,他们就会看到错误。因此,如果A人将电子邮件发送到test@yahoo.com,而B人已经发送了该电子邮件,则会出现错误。如果A人将电子邮件发送到test@yahoo.com并且该电子邮件与她一直使用的电子邮件相同,那么就没有错误。

我怎么能用Django做到这一点?

我有以下代码:

class UserEditForm(forms.ModelForm):

    class Meta:
        model = User
        fields = ('first_name', 'email', 'last_name', )

    def clean_email(self):
        email = self.cleaned_data['email']

        if email == self.email:
            return email

        try:
            DjangoUser.objects.get(email=email)
            raise ValidationError('Email is already taken.')
        except DjangoUser.DoesNotExist:
            pass

        return email

    email = forms.EmailField(required=True)

问题是self.email没有给我这个人当前的电子邮件。 :(

1 个答案:

答案 0 :(得分:0)

您想要的是当前用户(存储在request中),更确切地说是他/她的电子邮件。

所以我建议的解决方法是在表单中传递或设置request / e-mail / user

在创建表单后通过userform中设置view的示例:

# views.py
def someview(request):
    if request.method == 'POST':
        user_edit_form = UserEditForm(request.POST)
        user_edit_form.actual_user = request.user
        if user_edit_form.is_valid():
            do_some_stuff()

如果使用基于类的视图,方法几乎相同。这样,您可以在表单中查看:

self.actual_user.email == self.cleaned_data['email']

当然,如果您不需要整个用户,则只能设置用户的电子邮件。