Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django: TypeError: 'username' is an invalid keyword argument for this function

I have a model called Employee for the registration. When I run the code I go the

username' is an invalid keyword argument for this function 

error.

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

this is my view.py code

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))

This is my model:

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

This is my 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    

please someone help help me to resolve this matter. I’m referring some video tutorials.

like image 849
Lahiruzz Avatar asked Apr 11 '13 07:04

Lahiruzz


1 Answers

You have no username field in your model and it's redundant because you have that field already in the User model:

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'])
(...)
like image 163
Mariusz Jamro Avatar answered Dec 10 '22 10:12

Mariusz Jamro