2
我試着在forms.py加入另一場(PIN)和models.py中要添加一個字段,以形成和數據庫的Django
我得到的錯誤是
「FieldError在/學生/註冊/ 無法解析關鍵字 '銷' 到現場的選擇是:date_joined,電子郵件,FIRST_NAME,組ID,IS_ACTIVE,is_staff,is_superuser,LAST_LOGIN,姓氏,logentry,密碼,user_infos,user_permissions,用戶名」
forms.py
class RegisterForm(forms.Form):
GRADE_CHOICES = (
(9,'9'), (10,'10'), (11,'11'), (12,'12') ,
)
curr_year = date.today().year
GRAD_YEAR_CHOICES = (
(curr_year,curr_year), (curr_year+1,curr_year+1), (curr_year+2,curr_year+2), (curr_year+3,curr_year+3) ,
)
first_name = forms.CharField(max_length = 25)
last_name = forms.CharField(max_length = 25)
emailid = forms.EmailField()
passwd1 = forms.CharField(max_length=100,widget=forms.PasswordInput)
passwd2 = forms.CharField(max_length=100,widget=forms.PasswordInput)
gradyear = forms.ChoiceField(choices=GRAD_YEAR_CHOICES)
grade = forms.ChoiceField(choices=GRADE_CHOICES)
pin = forms.IntegerField()
def clean(self):
cleaned_data = super(RegisterForm, self).clean()
print cleaned_data
if cleaned_data['passwd1'] != cleaned_data['passwd2']:
raise forms.ValidationError({'passwd1':['Password do not match']})
if User.objects.filter(email=cleaned_data['emailid']).count():
raise forms.ValidationError({'emailid':['Email already taken ']})
if User.objects.filter(pin=cleaned_data['pin']).count():
raise forms.ValidationError({'pin':['Pin already taken ']})
return cleaned_data
views.py
def signup(request):
print "signup"
if request.method == 'POST':
print "post signup"
form = RegisterForm(request.POST)
try:
if form.is_valid():
print form.cleaned_data
u = User.objects.create_user(form.cleaned_data['emailid'], form.cleaned_data['emailid'], form.cleaned_data['passwd1'])
ui = UserInfo()
ui.user = u
ui.class_of = form.cleaned_data['gradyear']
ui.grade = form.cleaned_data['grade']
ui.balance = 0
print "Hi"
ui.pin = form.cleaned_data['pin']
print ui.pin
u.first_name = form.cleaned_data['first_name']
u.last_name = form.cleaned_data['last_name']
u.save()
ui.save()
user = authenticate(username=form.cleaned_data['emailid'], password=form.cleaned_data['passwd1'])
login(request,user)
print "after login in signup"
return redirect("/")
else:
print "error"
print form.errors
except:
raise
print "error here"
print form.errors
pass
#return render(request, 'student/register.html', {'form': form})
else:
form = RegisterForm()
return render(request, 'student/register.html', {'form': form})
models.py:
class UserInfo(models.Model):
user = models.OneToOneField(User, related_name='user_infos')
class_of = models.IntegerField()
#username = user.username
#fname = user.fname
#lname = user.last_name
#email = user.email
#Staff = user.is_staff
pub_date = models.DateTimeField(auto_now=True)
grade = models.IntegerField()
balance = models.DecimalField(max_digits=6, decimal_places=2)
pin = models.IntegerField()
#first_name = models.CharField(max_length = 25)
我不認爲不這樣做的權利。有什麼辦法以另一種方式在數據庫中添加另一列?
如果我試圖將其更改爲UserInfo.objects,它說的UserInfo心不是定義 –
,如果我嘗試從車型導入的UserInfo,它說,它不能inport UserInfo。 @AlexanderAllakhverdiyev –
您應該可以導入UserInfo:「從signup.models導入UserInfo」。如果這不起作用,您可能還有其他一些問題。 –