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