【问题标题】:Django Field Error Cannot resolve keyword 'username' into field. Choices are: companytype, contactno, contactperson, id, jobs, userDjango 字段错误无法将关键字“用户名”解析为字段。选项有:companytype、contactno、contactperson、id、jobs、user
【发布时间】:2013-04-09 17:58:37
【问题描述】:

我在执行项目时收到此错误

/accounts/EmpReg/ 处的字段错误
无法将关键字“用户名”解析为字段。选项有:companytype、contactno、contactperson、id、jobs、user

views.py

class User(models.Model):
    username = models.CharField(_('username'), max_length=30, unique=True)
    first_name = models.CharField(_('first name'), max_length=30, blank=True)
    last_name = models.CharField(_('last name'), max_length=30, blank=True)
    email = models.EmailField(_('e-mail address'), blank=True)
    password = models.CharField(_('password'), max_length=128)
    companyname = models.CharField(_('companyname'), max_length=50)
    usertype = models.CharField(_('usertype'), max_length=30)
    is_staff = models.BooleanField(_('staff status'), default=False)
    is_active = models.BooleanField(_('active'), default=True)
    is_superuser = models.BooleanField(_('superuser status'), default=False)
    last_login = models.DateTimeField(_('last login'), default=timezone.now)
    date_joined = models.DateTimeField(_('date joined'), default=timezone.now)
    groups = models.ManyToManyField(Group, verbose_name=_('groups'),blank=True)
    user_permissions = models.ManyToManyField(Permission,verbose_name=_('user permissions'), blank=True)


class RegistrationProfile(models.Model):
    user = models.ForeignKey(User, unique=True)
    activation_key = models.CharField(max_length=40)
    key_generated = models.DateTimeField()
    objects = RegistrationManager()

forms.py

class EmpRegistrationForm(forms.Form):
    username = forms.CharField(max_length=30,widget=forms.TextInput)
    email = forms.EmailField(widget=forms.TextInput))
    password1 = forms.CharField(widget=forms.PasswordInput)
    password2 = forms.CharField(widget=forms.PasswordInput)
    usertype = forms.CharField(widget=forms.HiddenInput)
    companyname = forms.CharField(widget=forms.TextInput)
    companytype = forms.ChoiceField(choices=PREFERRED_COMPANYTYPE, widget=forms.RadioSelect())
    contactno = forms.CharField(widget=forms.TextInput)
    contactperson = forms.CharField(widget=forms.TextInput)
    tos = forms.BooleanField()

views.py

def empreg(request):
    if request.method == 'POST':
        form = EmpRegistrationForm(request.POST)
        if form.is_valid():
            user = RegistrationProfile.objects.create_inactive_user(user__username=form.cleaned_data['username'],password=form.cleaned_data['password1'],email=form.cleaned_data['email'],)
            user.companyname = form.cleaned_data['companyname']
            user.usertype = form.cleaned_data['usertype']
            user.save()
            e=EmployerReg_Form(user=user, companytype=form.cleaned_data['companytype'],contactno=form.cleaned_data['contactno'],contactperson=form.cleaned_data['contactperson'])
            e.save()
            return HttpResponseRedirect('/accounts/EmpReg_Complete/')
else:
    form = EmpRegistrationForm()
    return render_to_response('registration/empregform.html', { 'form': form }, context_instance=RequestContext(request))

models.py

class EmployerReg_Form(models.Model):

    user = models.ForeignKey(User, unique=True)
    companytype = models.CharField(max_length=20)
    contactno = models.CharField(max_length=30)
    contactperson = models.CharField(max_length=30)

PREFERRED_COMPANYTYPE = (
('Company', 'Company'),
('Consultancy', 'Consultancy'),
)

请检查上面的代码并帮助我做错了

【问题讨论】:

  • 什么是EmployerReg_Form,它的外观如何?
  • EmployerReg_Form 是一个模型,现在我更新了
  • 仍然缺少一些东西。您的问题中未包含相关模型...
  • 我清除了上述错误。请对此给出答案。我将雇主和求职者的详细信息存储在同一个用户表中。我使用字段 usertype(usertype=employer/jobseeker) 区分了这两个细节。身份验证后登录时,应将其重定向到仪表板,具体取决于其用户类型。如果用户是求职者,则应将其重定向到一个仪表板,否则用户是雇主,则应将其重定向到另一个仪表板页面。请帮帮我
  • 我建议您自己尝试一下,并就此开始一个新的话题。为了让您开始,请阅读此页面:docs.djangoproject.com/en/dev/topics/auth/default/…“如何登录用户”在登录视图中:q = User.objects.get(username=username) 然后就像 q.usertype == 一样简单'employer' 重定向到 .... if q.usertype == 'jobseeker': 重定向到....

标签: django


【解决方案1】:

在这部分中,您调用的是 EmployerReg_Form:

e=EmployerReg_Form(
         user=user,
         companytype=form.cleaned_data['companytype'],
         contactno=form.cleaned_data['contactno'],
         contactperson=form.cleaned_data['contactperson']
  )

当您查看模型时,您会看到用户字段是用于建模用户的外键。如果您知道 ID EmployerReg_Form 应该映射到 User 您的行将是:

e=EmployerReg_Form(
         user__ID=user, 
         companytype=form.cleaned_data['companytype'],
         contactno=form.cleaned_data['contactno'],
         contactperson=form.cleaned_data['contactperson']
  )

映射到一个名字会是这样的:

e=EmployerReg_Form(
         user__username=user, 
         companytype=form.cleaned_data['companytype'],
         contactno=form.cleaned_data['contactno'],
         contactperson=form.cleaned_data['contactperson']
  )

注意用户后面的双下划线。

哦,用户模型不应该在你的models.py而不是views.py中吗?

【讨论】:

  • 感谢您的回答。我将雇主和求职者的详细信息存储在同一个用户表中。我使用字段 usertype(usertype=employer/jobseeker) 区分了这两个细节。身份验证后登录时,应将其重定向到仪表板,具体取决于其用户类型。如果用户是求职者,则应将其重定向到一个仪表板,否则用户是雇主,则应将其重定向到另一个仪表板页面。请帮帮我。
猜你喜欢
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
  • 2020-08-06
  • 1970-01-01
  • 2020-10-06
  • 2019-09-08
  • 2017-06-19
  • 1970-01-01
相关资源
最近更新 更多