尝试使用Django创建用户时,使用关键字“username”的FieldError

时间:2012-04-10 01:51:01

标签: django django-registration django-users django-errors

我的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

填写注册字段并按下注册按钮后会发生这种情况。 我无法解释这个错误。这是什么意思?

2 个答案:

答案 0 :(得分:1)

您需要按照Adding extra fields to django-registration form

中的说明继承RegistrationForm

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

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

将来,请至少包括发生错误的行号。

答案 1 :(得分:0)

当前代码不应导致此错误。

该错误表明您使用username关键字参数过滤到StudentProfile类,根据您的模型,该字段没有username字段。

错误应列出代码中断的行,并告诉您具体发生的位置 - 这就是答案所在。你的代码? Django注册码?我发布之前不知道。

仅供参考,如果您尝试按无效字段过滤模型,则会出现此错误。

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

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