TypeError at / Field 'id' expected a number but got <username>

возвращает имя пользователя вместо user.id, я пытаюсь получить user.id в поле user_id, но получаю имя пользователя, поле user-id зарегистрировано как forignkey fiels пользователя, поэтому оно возвращает только номер. views.py


def index(request):
    if request.user.is_authenticated:
        cus = User.objects.get(pk=request.user.id)
        print(cus)
        if request.method == 'POST':
            task = request.POST['task']
            priority = request.POST['priority']
            date = request.POST['date']
            time = request.POST['time']

            add_task = AddTodo(task=task, priority=priority, date=date, time=time, user_id=cus)
            add_task.save()

            if add_task is not None:
                print("task added suuccesfuly", task)
            else:
                print("task not added", task)
    return render(request, 'index.html')

models.py

class AddTodo(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    task = models.CharField(max_length=100, blank=True)
    priority = models.IntegerField()
    date = models.DateField()
    time = models.TimeField()
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

исключение:

TypeError: Field 'id' expected a number but got <User: captainamerica123>.

Вы передали объект пользователя в user_id при создании объекта AddToDo. Если вы хотите создать объект user_id, вам нужно передать идентификатор пользователя, а не объект user. Конечно, вы можете создавать с объектом user. Таким образом, вы можете обновить код следующим образом

add_task = AddTodo(task=task, priority=priority, date=date, time=time, user_id=cus.id)

или

add_task = AddTodo(task=task, priority=priority, date=date, time=time, user=cus)

Оба будут работать.

def index(request):
    if request.user.is_authenticated:
        cus = User.objects.get(pk=request.user.id)
        print(cus)
        if request.method == 'POST':
            task = request.POST['task']
            priority = request.POST['priority']
            date = request.POST['date']
            time = request.POST['time']

            add_task = AddTodo(task=task, priority=priority, date=date, time=time, user_id=cus.id)
            add_task.save()

            if add_task is not None:
                print("task added suuccesfuly", task)
            else:
                print("task not added", task)
    return render(request, 'index.html')
Вернуться на верх