Установите параметр 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