0
我正在嘗試爲Django應用創建一個自定義用戶,並且遇到了一個證明耗時的小問題。我將切入正題:ModelForm在用戶創建之前需要用戶:is_valid()返回false
我的Django的版本是1.6.2和2.7.4的Python
這裏是模型
class Account(models.Model):
user = models.OneToOneField(User)
game_id = models.PositiveIntegerField(null=True, blank=True, default=None)
avatar = models.ImageField()
desc = models.CharField(max_length=2500, null=True, blank=True, default=None)
的的ModelForm:
class RegistrationForm(ModelForm):
game_name = forms.CharField(label=(u'In Game Name'))
email = forms.EmailField(label=(u'Email Address'))
password = forms.CharField(label=(u'Password'),
widget=forms.PasswordInput(render_value=False))
password1 = forms.CharField(label=(u'Verify Password'),
widget=forms.PasswordInput(render_value=False))
class Meta:
model = Account
exclude = ('user',)
def clean_game_name(self):
username = self.cleaned_data['game_name']
try:
User.objects.get(username=username)
except User.DoesNotExist:
return username
raise forms.ValidationError("That username is already taken, please select another.")
def clean(self):
if self.cleaned_data['password'] != self.cleaned_data['password1']:
raise forms.ValidationError("The passwords did not match. Please try again.")
return self.cleaned_data
而且查看:
def account_registration(request):
if request.user.is_authenticated():
return HttpResponseRedirect('/account/profile/')
if request.method == 'POST':
form = RegistrationForm(request.POST)
if form.is_valid(): # returns false
user = User.objects.create_user(
username=form.cleaned_data['game_name'],
email=form.cleaned_data['email'],
password=form.cleaned_data['password'])
user.save()
member = Account(user=user)
member.save()
return HttpResponseRedirect('/account/profile/')
else:
print form.errors # output below
return render_to_response('account/register.html', {'form': form}, context_instance=RequestContext(request))
else:
form = RegistrationForm()
context = {'form': form}
return render_to_response('account/register.html', context, context_instance=RequestContext(request))
輸出打印:
user: This field is required.
我如何可以提供RegistrationForm
與User
對象,不應該存在,直到登記表已經驗證後?我對python和django都是全新的,所以我認爲解決方案非常明顯。
編輯:正如我在註釋中添加模板
<form action="" method="post">
{% csrf_token %}
{% if form.errors %}<p>Please correct the following fields:</p>{% endif %}
<div class="register_div">
{% if form.game_name.errors %}<p class="error">{{ form.game_name.errors }}</p>{% endif %}
<p><label for="game_name"{% if form.game_name.errors %} class="error"{% endif %}>In Game Name:</label></p>
<p>{{ form.game_name }}</p>
</div>
<div class="register_div">
{% if form.email.errors %}<p class="error">{{ form.email.errors }}</p>{% endif %}
<p><label for="email"{% if form.email.errors %} class="error"{% endif %}>Email:</label></p>
<p>{{ form.email }}</p>
</div>
<div class="register_div">
{% if form.password.errors %}<p class="error">{{ form.password.errors }}</p>{% endif %}
<p><label for="password"{% if form.password.errors %} class="error"{% endif %}>Password:</label></p>
<p>{{ form.password }}</p>
</div>
<div class="register_div">
{% if form.password1.errors %}<p class="error">{{ form.password1.errors }}</p>{% endif %}
<p><label for="password1"{% if form.password1.errors %} class="error"{% endif %}>Verify Password:</label></p>
<p>{{ form.password1 }}</p>
</div>
<p><input type="submit" alt="register" /></p>
</form>
該代碼不應該給出該錯誤,因爲您已將表單字段中的用戶排除在外。你確定你使用的是精確的代碼嗎? (另外,我不確定你爲什麼使用ModelForm,因爲你並沒有真正使用任何Account域。) –
是的,我肯定我正在使用該代碼。我正在使用帳戶類,因爲我希望用戶能夠稍後添加這些內容,但不需要註冊。而且因爲我仍然想要所有內置的User類的好處。像身份驗證等。 – robbmj
你可以請添加你已經省略的代碼嗎? –