Django:TypeError:'username'是此函数的无效关键字参数

时间:2013-04-11 07:24:30

标签: django django-models django-forms typeerror

我有一个名为Employee的模型用于注册。当我运行代码时,我去了

username' is an invalid keyword argument for this function 

错误。

employee=Employee(user=user, username= form.cleaned_data['username'], email= form.cleaned_data['email'], password=form.cleaned_data['password'])

这是我的view.py代码

from django.http import HttpResponseRedirect
from django.contrib.auth.models import User
from django.shortcuts import render_to_response
from django.template import RequestContext
from Employee_Details.forms import RegistationForm
from Employee_Details.models import Employee

def EmployeeRegistation(request):
if request.user.is_authenticated():
    return HttpResponseRedirect('/profile/')

if request.method=='POST':
    form=RegistationForm(request.POST)
    if form.is_valid():
        user=User.objects.create_user(username= form.cleaned_data['username'],email= form.cleaned_data['email'],password=form.cleaned_data['password'])


        user.save()

        employee=Employee(user=user, username= form.cleaned_data['username'],email= form.cleaned_data['email'],password=form.cleaned_data['password'])
        employee.save()
        return HttpResponseRedirect('/profile/')

    else:
        return render_to_response('registation.html',{"form":form}, context_instance=RequestContext(request))


else:
    '''user is not submitting the form show a blank Registation Form'''
    form=RegistationForm();
    context={'form':form}
    return render_to_response('registation.html',context,context_instance=RequestContext(request))

这是我的模特:

from django.db import models
from django.contrib.auth.models import User
from django.db.models.signals import post_save

class Employee(models.Model):
    user=models.OneToOneField(User)
    name=models.CharField(max_length=100)
    address=models.CharField(max_length=200)
    designation=models.CharField(max_length=100)
    email=models.CharField(max_length=100)  
    role=models.CharField(max_length=10)
    #image=models.ImageField()
    project=models.CharField(max_length=50)
    task=models.CharField(max_length=50)

    def __unicode(self):
        return self.name

这是我的form.py

from django import forms
from django.contrib.auth.models import User
from django.forms import ModelForm
from Employee_Details.models import Employee

class RegistationForm(ModelForm):

    username=forms.CharField(label=(u'User Name'))
    email=forms.EmailField(label=(u'Email Address'))
    password=forms.CharField(label=(u'Password'))
    password1=forms.CharField(label=(u'Verfy Password'))    
    name=forms.CharField(label=(u'Name'))
    address=forms.CharField(label=(u'Address'))
    designation=forms.CharField(label=(u'Designation')) 
    role=forms.CharField(label=(u'Role'))
    #image=models.ImageField()
    project=forms.CharField(label=(u'Project'))
    task=forms.CharField(label=(u'Task'))

    class Meta:
        model=Employee
        exclude=('user',)

    def clean_username(self):
        username=self.cleaned_data['username']
        try:
            User.objects.get(username=username)
        except User.DoesNotExist:
            return username
        raise forms.ValidationError('The username is already taken. Please try with another')

    def clean(self):
        if self.cleaned_data['password'] !=self.cleaned_data['password1']:
            raise forms.ValidationError("The Password did not match. Please try again")
        return self.cleaned_data    
请某人帮忙帮我解决此事。我指的是一些视频教程。

2 个答案:

答案 0 :(得分:8)

您的模型中没有username字段,因为您已将该字段添加到User模型中,所以它是多余的:

user=User.objects.create_user(username=form.cleaned_data['username'],email= form.cleaned_data['email'],password=form.cleaned_data['password'])
user.save()

employee=Employee(user=user, email=form.cleaned_data['email'], password=form.cleaned_data['password'])
(...)

答案 1 :(得分:-1)

尝试modelformset_factory