2012-04-10 37 views
0

My Models.py,這裏我使用OneToOneField來擴展StudentProfile。嘗試使用Django創建用戶時使用關鍵字'username'的FieldError

from django.db import models 
from django.contrib.auth.models import User, UserManager 


class SecretQuestion(models.Model): 
    question = models.CharField(max_length=200) 
    def __unicode__(self): 
     return self.question 


class StudentProfile(models.Model): 
    user = models.OneToOneField(User) 
    batch = models.CharField(max_length=10) 
    course = models.CharField(max_length=20) 
    date_of_birth = models.DateField() 
    secret_question = models.ForeignKey(SecretQuestion) 
    answer = models.CharField(max_length=20) 
    contact = models.CharField(max_length=20) 

而且我的註冊看,我正在創建新的用戶main_user,我用它來創建學生簡介: -

def register_page(request): 
    if request.method == 'POST': 
     form = RegistrationForm(request.POST) 
     if form.is_valid(): 
      main_user = User.objects.create_user(
       username= form.cleaned_data['username'], 
       password = form.cleaned_data['password1'], 
      ) 
      user = StudentProfile.objects.create(    
       user_id = main_user.id,http://stackoverflow.com/questions/ask 
       batch=form.cleaned_data['batch'], 
       course=form.cleaned_data['course'], 
       date_of_birth=form.cleaned_data['date_of_birth'], 
       secret_question=form.cleaned_data['secret_question'], 
       answer=form.cleaned_data['answer'], 
       contact=form.cleaned_data['contact'] 
      ) 
     return HttpResponseRedirect('/register/success/') 
    else: 
     form = RegistrationForm() 

    variables = RequestContext(request, {'form': form}) 
    return render_to_response('registration/register.html',variables) 

在Django註冊後,我得到,

FieldError at /register/ 

Cannot resolve keyword 'username' into field. Choices are: answer, batch, contact, course, date_of_birth, id, secret_question, user 

填寫註冊字段並按下注冊按鈕後發生這種情況。 我無法解釋這個錯誤。這是什麼意思?

回答

1

你需要繼承RegistrationFormAdding extra fields to django-registration form


User.objects.create_user描述有一個名爲username沒有關鍵字參數。用戶名必須是第一個位置參數:

 main_user = User.objects.create_user(form.cleaned_data['username'], 
      password = form.cleaned_data['password1'], 
     ) 

將來,請至少包含發生錯誤的行號。

+0

我已經做到了,但我依然得到同樣的錯誤。即使我不知道發生了什麼,因爲如果我刪除整個用戶名代碼(這部分form.cleaned_data ['用戶名'])仍然我得到同樣的錯誤,任何線索? – JohnRK 2012-04-10 02:26:28

+0

@Jainit嗯看到我的編輯,特別是[第二個答案](http://stackoverflow.com/a/7580903/500584)到鏈接的問題 - 這有幫助嗎? – agf 2012-04-10 02:37:14

+0

它似乎能工作,我有兩個問題, 有沒有什麼辦法從RegistrationForm排除電子郵件和使用類Meta和從模型生成表單,有沒有什麼辦法可以在字段中寫入quesryset,我想做這樣的事情: - secret_question = forms.ModelChoiceField(queryset = SecretQuestion.objects.all()) – JohnRK 2012-04-10 04:52:58

0

當前的代碼不應該導致這個錯誤。

錯誤表明您正在根據您的模型通過username關鍵字參數篩選您的StudentProfile類,該字段沒有username字段。

錯誤應該列出你的代碼正在打破的哪一行,並告訴你到底發生了什麼 - 這就是答案所在。你的代碼? Django註冊碼?我不知道,直到你發佈它。

僅供參考,如果您嘗試通過無效字段過濾模型,則會出現此錯誤。

MyModel.objects.filter(non_existent_field=True) # would throw this error. 

傳遞一個無效的字段爲create會導致TypeError

+0

他的代碼確實會導致此錯誤,在'form = RegistrationForm(request.POST)'行。有時讓人們對Django的行號感到困惑,因爲他們沒有得到正常的Python回溯。 – agf 2012-04-10 04:55:10

相關問題