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) 

我不認爲不這樣做的權利。有什麼辦法以另一種方式在數據庫中添加另一列?

回答

0

您的的UserInfo模式「針」的領域,但在forms.py你試圖過濾用戶型號:

if User.objects.filter(pin=cleaned_data['pin']).count(): 

用戶模型沒有「腳」場,所以你得到了這個錯誤信息。

此外,我建議你要學會並開始使用ModelForms:https://docs.djangoproject.com/en/1.8/topics/forms/modelforms/

+0

如果我試圖將其更改爲UserInfo.objects,它說的UserInfo心不是定義 –

+0

,如果我嘗試從車型導入的UserInfo,它說,它不能inport UserInfo。 @AlexanderAllakhverdiyev –

+0

您應該可以導入UserInfo:「從signup.models導入UserInfo」。如果這不起作用,您可能還有其他一些問題。 –

相關問題