Field 'id' expected a number but got 'prashant'
I'm trying to get value of user field from my employee model but it's showing above error.I would request your solution to this problem.I have mentioned my models.py & views.py for reference.
models.py
class Employee(models.Model):
First_Name = models.CharField(max_length=200,blank=False,null=False)
Last_Name = models.CharField(max_length=200)
DOB = models.DateField()
Primary_skill=models.TextField(max_length=1000)
user = models.OneToOneField(User,on_delete=models.CASCADE,null=True,blank=True)
Employee_Id =
models.UUIDField(primary_key=True,default=uuid.uuid4,editable=False,unique=True)
views.py
def loginp(request):
page ='login'
if request.method=="POST":
username = request.POST.get("Username")
password = request.POST.get("Password")
name = Employee.objects.get(user=username)
context={'use':name}
try:
username = Employee.objects.get(username=1)
except:
messages.error(request,"Invalid Username")
user = authenticate(request,username=username,password=password)
if user is not None:
login(request,user)
return render(request,'profile.html',context)
else:
messages.error(request,"Authentication Failed.Please Try again with correct
credentials")
context={'page':page}
return render(request,'login.html',context)
Why taking instance from Employee table?
Instead of this:
name = Employee.objects.get(user=username)
Try this:
name = User.objects.get(username=username)
And in your try
block you are accessing Employee
table with the field username
, and there is no such field in it so it always goes to except
block.
There instead of this:
username = Employee.objects.get(username=1)
Try this:
username = User.objects.get(username=1)
And if your purpose includes if user is included in the Employee
table, You can try this way too:
name = Employee.objects.get(user__username=username)
name = Employee.objects.get(user=username)
here user is foreignkey. it should be int value(ID) if you want to filter with name then this will work
name = Employee.objects.get(user__username=username)
But making query in auth_user
will be much better.
any relationship by default have id in django but you can access another field using double underscore like (user__username,user__firstname,user__email) etc.
in you case you tried filter user by username but by default User field of Employee model have id so you got an error "Field 'id' expected a number but got 'prashant'"
put like this...
name = Employee.objects.get(user__username=username)
insted of...
name = Employee.objects.get(user=username)