关键字为'的字段错误;用户名';尝试使用Django创建用户时

关键字为'的字段错误;用户名';尝试使用Django创建用户时,django,django-registration,django-users,django-errors,Django,Django Registration,Django Users,Django Errors,My Models.py,我在这里使用OneToOneField来扩展StudentProfile 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):

My Models.py,我在这里使用OneToOneField来扩展StudentProfile

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
这是在填写注册字段并按下注册按钮后发生的。
我无法解释这个错误。这意味着什么?

您需要将
注册表单子类化,如中所述


没有名为
username
的关键字参数。用户名必须是第一个位置参数:

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

以后,请至少包括发生错误的行号。

当前代码不应导致此错误

该错误表明您正在通过
username
关键字参数筛选
StudentProfile
类,根据您的模型,该类没有
username
字段

错误应该列出您的代码在哪一行中断,并准确地告诉您这是在哪里发生的-这就是答案所在。你的密码?Django注册码?我不知道,直到你把它贴出来

仅供参考,如果尝试按无效字段筛选模型,则会出现此错误

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

将无效字段传递到
create
会导致
TypeError

我已经这样做了,但仍然会得到相同的错误。甚至我都不知道发生了什么,因为如果我删除整个用户名代码(这部分表单.cleaned_data['username']),我仍然会遇到同样的错误,有什么线索吗?@Jainit-Hmm看到我的编辑,特别是链接的问题-这有帮助吗?似乎会起作用,我有两个问题,有没有办法将电子邮件从RegistrationForm中排除?当使用Meta类并从模型生成表单时,有没有办法在字段中编写quesryset?我想这样做:-secret\u question=forms.modelcooceField(queryset=SecretQuestion.objects.all())@Jainit您应该能够执行
exclude=('email',)
在表单的
Meta
中。您应该能够像表单中那样指定
secret\u question
,即使在使用模型时也是如此。有关更多信息,请参阅。非常感谢,错误已修复,我刚刚用RegistrationForm扩展了我的表单,它成功了!,然而,我需要删除数据库,并且我已经重新创建了它,它在没有I的情况下无法工作。在
form=RegistrationForm(request.POST)
行上,它的代码确实会导致此错误。人们有时会混淆Django的行号,因为他们没有正常的Python回溯。