В поле '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)
Вернуться на верх