Значение исключения: strptime () аргумент 1 должен быть str, а не None - PullRequest
0 голосов
/ 13 марта 2019

Я пытаюсь получить пользовательский ввод (DateField) из моего приложения django, этот код дает мне вышеуказанную ошибку

Код ошибки:

def home(request):
today = datetime.date.today()
# If this is a POST request then process the Form data
if request.method == 'GET':

    form = DeadlineForm(request.GET)
    # instance = form.save()
    currentdate = datetime.date.today()
    print(currentdate)
    userinput = formd.data
    birthday = datetime.datetime.strptime(userinput,    '%m/%d/%Y').date()
    # print(birthday)
    days = birthday - currentdate
    daysLeft = 'Days to your birthday is ' ,+ days 
    return HttpResponse(daysLeft)
context = {
    'form': form,
    'today':today
}
return render(request, 'calculator/home.html', context)

Но когда я использую строковый формат датывсе работает нормально, но я хочу, чтобы пользователи могли вставлять свою собственную дату.

код без ошибок:

def home(request):
today = datetime.date.today()
# If this is a POST request then process the Form data
if request.method == 'GET':

    form = DeadlineForm(request.GET)
    # instance = form.save()
    currentdate = datetime.date.today()
    print(currentdate)
    # userinput = formd.data
    birthday = datetime.datetime.strptime('03/15/2019',    '%m/%d/%Y').date()
    # print(birthday)
    days = birthday - currentdate
    daysLeft = 'Days to your birthday is ' ,+ days 
    return HttpResponse(daysLeft)
context = {
    'form': form,
    'today':today
}
return render(request, 'calculator/home.html', context)

Может кто-нибудь показать мне, как получить строковый ввод от пользователя.

Ответы [ 5 ]

0 голосов
/ 14 марта 2019

Большое спасибо, ребята, за ответы, это было действительно полезно. Я понимаю, что ошибка «Значение исключения: аргумент 1 strptime () должен быть str, а не None», потому что первый аргумент strptime () не был строкой, поэтому я фактически использовал функцию str () для преобразования входных данных в строку. Теперь все работает нормально. Так что спасибо еще раз.

Вот код:

def home(request):
today = datetime.date.today()
form = CalculatorForm(request.POST)
# If this is a POST request then process the Form data

if form.is_valid():
    instance = form.save()
    currentdate = datetime.date.today()
    userinput = str(instance.deadline)
    birthday = datetime.datetime.strptime(userinput, '%Y-%m-%d').date()
    if birthday < datetime.date.today():
        return HttpResponse('Invalid date - You entered a date in the past')# print(birthday)
    days = birthday - currentdate
    print(days)
    # daysLeft = 'Days to your event is ' , days 
    # print(daysLeft)
    return render(request, 'calculator/check.html', {'days':days})
    ............
    ............
0 голосов
/ 13 марта 2019

У вас есть опечатка, для начала userinput = formd.data

userinput, на который вы нацеливаетесь, - это словарь входных данных формы, очищенных или нет, вам нужно указать, какое поле или ввод вы хотите.

То, что вы хотите сделать, это, - подтвердите вашу форму - получить поле

def home(request):
   if request.method == 'GET':

       form = DeadlineForm(request.GET)
       if form.is_valid():
           userinput = form.cleaned_data['date']

           birthday = datetime.datetime.strptime(userinput, '%m/%d/%Y').date()
0 голосов
/ 13 марта 2019

попробуйте

def home(request):
   today = datetime.date.today()
   # If this is a POST request then process the Form data
   if request.method == 'POST':

       form = DeadlineForm(request.POST)
       # instance = form.save()
       currentdate = datetime.date.today()

       userinput = form.cleaned_data['date']
       or
       userinput = request.POST.get('date')

       birthday = datetime.datetime.strptime(userinput,    '%m/%d/%Y').date()
       # print(birthday)
       .....

в вашем пользовательском вводе вы передаете значение None функции strptime

и использовать метод post, чтобы получить пользовательский ввод из формы

0 голосов
/ 13 марта 2019

Итак, во-первых, вы обрабатываете ввод формы неверным методом

GET отвечает за отображение формы, на тот момент пользователь не предоставил никаких данных, и поэтому вы получаете Нет

Псевдокод:

if request.method == 'GET':
  render_form
if request.method == 'POST':
  handle_form
0 голосов
/ 13 марта 2019

Ниже приведен синтаксис метода strptime () -

time.strptime(string[, format])

В следующем примере показано использование метода strptime ().

#!/usr/bin/python
import time

struct_time = time.strptime("30 Nov 00", "%d %b %y")
print ("returned tuple: %s " % struct_time)

Когда мы запускаем вышеуказанную программу, она выдает следующий результат -

возвращаемый кортеж: (2000, 11, 30, 0, 0, 0, 3, 335, -1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...