Как решить проблему strftime TypeError при выполнении POST-запроса в Django?

Я создаю API, который содержит DateTimeField, используя Django, но получаю следующую ошибку "TypeError: descriptor 'strftime' for 'datetime.date' objects does not apply to a 'str' object" Я пытался проверить различные источники, но не нашел решения.

  • Ошибка возникает из-за строки start_date.
from datetime import datetime

def question_view(request):
    if request.method == 'GET':
        return HttpResponse("Вопрос не создан")
    elif request.method == 'POST':
        poll_question = request.POST['poll_question']
        title = request.POST['title']
        start_date = datetime.strftime(request.POST['start_date'],'%Y-%m-%d')
        Question.objects.create(poll_question=poll_question,title=title, start_date=start_date)
        return HttpResponse("Вопрос создан")
    else:
        return "Попробуйте снова"

Я думаю, что простой способ исправить это - преобразовать объект в строку в соответствии с заданным форматом, используя datetime.strptime, как указано в doc

Ваш вид теперь будет выглядеть так:

from datetime import datetime

def question_view(request):
    if request.method == 'GET':
        return HttpResponse("Вопрос не создан")
    elif request.method == 'POST':
        poll_question = request.POST['poll_question']
        title = request.POST['title']
        start_date = datetime.strptime(request.POST['start_date'],'%Y-%m-%d')
        Question.objects.create(poll_question=poll_question,title=title, start_date=start_date)
        return HttpResponse("Вопрос создан")
    else:
        return "Попробуйте снова"

strptime Разбор строки в объект datetime, заданный соответствующим форматом. (Согласно документации по datetime)

.

В datetime есть два метода:

  • strftime: используется для преобразования объекта даты в строку.
  • strptime: используется для преобразования строки в объект даты.

В вашем случае вам нужен второй. Ваш код будет выглядеть следующим образом:

start_date = datetime.strptime(request.POST['start_date'],'%Y-%m-%d')
Вернуться на верх