正如ars和Diarmuid所指出的那样,你可以传递
request.user你的表单,并将其用于验证电子邮件。但是,Diarmuid的代码是错误的。该代码应实际读取:
from django import formsclass UserForm(forms.Form): email_address = forms.EmailField(widget = forms.TextInput(attrs = {'class':'required'})) def __init__(self, *args, **kwargs): self.user = kwargs.pop('user', None) super(UserForm, self).__init__(*args, **kwargs) def clean_email_address(self): email = self.cleaned_data.get('email_address') if self.user and self.user.email == email: return email if UserProfile.objects.filter(email=email).count(): raise forms.ValidationError(u'That email address already exists.') return email然后,在你看来,可以这样使用它:
def someview(request): if request.method == 'POST': form = UserForm(request.POST, user=request.user) if form.is_valid(): # Do something with the data pass else: form = UserForm(user=request.user) # Rest of your view follows
请注意,你应该将request.POST作为关键字参数传递,因为构造函数希望将“ user”作为第一个位置参数。
这样,你需要将其
user作为关键字参数传递。你可以将其
request.POST作为位置参数或关键字参数(通过
data=request.POST)传递。



