Ошибка ввода в / поле «идентификатор» ожидал номер, но получил

#python #django #forms #typeerror

Вопрос:

возвращает имя пользователя вместо user.id,я пытаюсь получить user.id в поле user_id, но при получении имени пользователя поле идентификатора пользователя регистрируется как поля forignkey пользователя,поэтому оно возвращает только номер 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 lt;User: captainamerica123gt;.   

Комментарии:

1. Можете ли вы отредактировать вопрос, чтобы дать минимальный рабочий пример вашей проблемы.

Ответ №1:

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

 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)  

И то, и другое сработает.

Ответ №2:

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