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