<p>正如ars和Diarmuid所指出的,您可以将<code>request.user</code>传递到表单中,并在验证电子邮件时使用它。然而,Diarmuid的代码是错误的。代码实际上应该是:</p>
<pre><code>from django import forms
class 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
</code></pre>
<p>然后,在您看来,您可以这样使用它:</p>
<pre><code>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
</code></pre>
<p><s>请注意,应该将request.POST作为关键字参数传递,因为构造函数希望“user”作为第一个位置参数。</s></p>
<p>这样做时,需要将<code>user</code>作为关键字参数传递。可以将<code>request.POST</code>作为位置参数传递,也可以作为关键字参数传递(通过<code>data=request.POST</code>)。</p>