繁体   English   中英

Django编辑个人资料

[英]Django editing profile

我要执行以下操作:-允许站点用户以表格形式编辑其电子邮件地址。 -如果他们的电子邮件已经存在于数据库中,则只要输入的电子邮件属于自己以外的其他人,他们就会看到错误。 因此,如果人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没有给我该人的当前电子邮件。 :(

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

因此,我建议作为一种解决方法是在表单中传递或设置request / e-mail / user

设定的一个例子user在您的form通过所述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']

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM