В поле 'id' ожидалось число, но получено 'prashant'
Я пытаюсь получить значение поля пользователя из моей модели сотрудника, но она показывает вышеуказанную ошибку. Я бы попросил вас решить эту проблему. Я указал мои models.py & views.py для справки.
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)
Зачем брать экземпляр из таблицы Employee?
Вместо этого:
name = Employee.objects.get(user=username)
Попробуйте это:
name = User.objects.get(username=username)
В блоке try
вы обращаетесь к таблице Employee
с полем username
, а в ней нет такого поля, поэтому она всегда переходит в блок except
.
Там вместо этого:
username = Employee.objects.get(username=1)
Попробуйте это:
username = User.objects.get(username=1)
А если ваша цель - определить, включен ли пользователь в таблицу Employee
, вы можете попробовать и этот способ:
name = Employee.objects.get(user__username=username)
name = Employee.objects.get(user=username)
здесь user является foreignkey. он должен быть int value(ID) если вы хотите фильтровать по имени, то это будет работать
name = Employee.objects.get(user__username=username)
Но сделать запрос в auth_user
будет намного лучше.
в django любые отношения по умолчанию имеют id, но вы можете получить доступ к другому полю, используя двойное подчеркивание, например (user__username, user__firstname, user__email) и т.д.
В вашем случае вы пытались фильтровать пользователей по имени пользователя, но по умолчанию поле User модели Employee имеет id, поэтому вы получили ошибку "Field 'id' expected a number but got 'prashant'"
поставьте так...
name = Employee.objects.get(user__username=username)
инстинкт...
name = Employee.objects.get(user=username)