我在django建立了一个社交网络,而且我在用户创建表单上遇到了麻烦。 这是我的代码:
def register(request):
if request.method == 'POST':
form = UserProfileForm(request.POST) #
if form.is_valid():
u = UserProfile.objects.create(first_name = form.cleaned_data['first_name'],...)
u.set_password(u.password)
u.save()
return HttpResponseRedirect(...)
else:
return Http404
else:
form = UserProfileForm()
return render_to_response(...,
{'form': form},
context_instance=RequestContext(request))
class UserProfileForm(ModelForm):
first_name = forms.CharField(help_text="Por favor, introduzca su nombre", required=True)
...
class Meta:
model = UserProfile
fields = ['first_name',...]
def __init__(self, request=None, *args, **kwargs):
self.user = kwargs.pop('user', None)
super(UserProfileForm, self).__init__(*args, **kwargs)
def validate_user(self):
first_name_length = len(self.cleaned_data['first_name'])
...
if not first_name_length > 0:
raise ValidationError("Por favor, introduzca nombre valido")
...
class UserProfile(models.Model):
first_name = models.CharField(max_length=50, blank=True)...
我正在使用带有form.as_p的模板,但我的表单实例永远不会有效。我究竟做错了什么?谁能帮我?
答案 0 :(得分:1)
查看表单的签名:
def __init__(self, request=None, *args, **kwargs)
现在看看你如何实例化它:
form = UserProfileForm(request.POST)
因此,您将request.POST
作为请求参数传递。
你应该真的避免像这样改变子类的签名。特别是在您的情况下,因为您根本没有使用或传递请求。如果你确实需要这样做,你应该使用从user
得到的kwargs
值(和你再次使用或传递的那样),所以我不知道你为什么要这么做呢。)