2 回答

TA贡献1779条经验 获得超6个赞
我认为你把事情复杂化了。所以试试这样:
# forms
class UserForm(forms.ModelForm):
password = forms.CharField(widget= forms.PasswordInput)
full_name = forms.CharField()
codeforces_id = forms.CharField()
Uva_Id = forms.CharField()
class Meta:
model = User
fields = ('username','email','password', 'full_name', 'codeforces_id', 'Uva_Id')
def save(self, commit=True):
full_name = self.cleaned_data.pop('full_name')
codeforces_id = self.cleaned_data.pop('codeforces_id')
uva_Id = self.cleaned_data.pop('Uva_Id')
user = super(UserForm, self).save(commit=False)
password = self.cleaned_data.get('password')
username = self.cleaned_data.get('username')
user.set_password(password)
user.save()
Profile.objects.create(
user=user,
full_name = full_name,
codeforces_id = codeforces_id,
Uva_Id = uva_id
)
authenticate(username=username, password=password)
return user
# view
class UserFormView(CreateView):
form_class = UserForm
template_name = 'some_template.html'
# template
<form action="/your-name/" method="post">
{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Submit">
</form>
# Also you can remove the signal related codes from Profile Model as well
添加回答
举报