Установите параметр url по умолчанию или игнорируйте ввод none, если ничего не указано - Проект Django

У меня есть список словарей:

mylist=
[{'Date': '10/2/2021', 'ID': 11773, 'Receiver': 'Mike'},
{'Date': '10/2/2021', 'ID': 15673, 'Receiver': 'Jane'},
{'Date': '10/3/2021', 'ID': 11773, 'Receiver': 'Mike'},
... 
{'Date': '12/25/2021', 'ID': 34653, 'Receiver': 'Jack'}]

Я хочу выбрать строки на основе диапазона вводимых дат. Я успешно сделал это, добавив к URL ?start=val1&end=val2 и смог вызвать значения входной даты от views.py до template.html :

Добавление URL с помощью ?start=val1&end=val2 на основе моих дат ввода в HTML

<div class="d-sm-flex align-items-center justify-content-between mb-4">
  <form method="get" action="/chart/">
    <div class="form-row">
     <label for="start">Start Date:</label>
     <div class="col">
        <input type="date" class="form-control" name="start"  min="2020-01-03" required>
  </div>
  <label for="end">End Date:</label>
  <div class="col">
      <input type="date" class="form-control" name="end"  min="2020-01-03" required>
  </div>
  <button type="submit" class="btn btn-primary"> Generate Report</button>
</div>
</form>                   

Определите start и end в моем views.py:

start = request.GET.get('start', None)
end = request.GET.get('end', None)

Выбираем строки на основе введенного диапазона дат в моем views.py:

dfmylist = pd.DataFrame(mylist)
dfmylist['Date'] = pd.to_datetime(dfmylist['Date']) # you missed this line
dfmylistnew = (dfmylist['Date'] > start) & (dfmylist['Date'] <= end)
new = dfmylist.loc[dfmylistnew]

И я смог вспомнить {{new}} в своем HTML. Единственное, когда я открываю URL по умолчанию, он выдает ошибку: `Invalid comparison between dtype=datetime64[ns] and NoneType'. Я знаю, что это происходит потому, что не были введены значения даты, поэтому начало и конец не имеют значения.

Что нужно добавить в views.py, чтобы URL по умолчанию без выбранных дат присваивал значение по умолчанию для начала и конца?

Просто добавьте условие, которое гарантирует, что значения есть:

dfmylist = pd.DataFrame(mylist)
dfmylist['Date'] = pd.to_datetime(dfmylist['Date'])
if start and end and dfmylist:
    dfmylistnew = (dfmylist['Date'] > start) & (dfmylist['Date'] <= end)
else:
    # do something when at least one of the variables is None
Вернуться на верх