#python #html #django
#python #HTML #django
Вопрос:
У меня есть мое приложение на heroku. Я использую timeme js для записи активного времени пользователя, проведенного на странице, и использую скрытую форму для сохранения значения в базе данных. Кроме того, я использую пакет otree для написания своего приложения. Ниже приведен код, который я использую:
models.py
class Active(ExtraModel):
active_duration = models.FloatField()
active_record = models.LongStringField()
views.py/pages.py в отрее
class intro_instructions(Page):
def before_next_page(self):
data = self.form.data
p = self.player
active = Active.objects.create(active_duration=data['active_duration'],
active_record=data['active_record'])
active.save()
HTML
<form method="post" role="form" id="form" autocomplete="off">{% csrf_token %}
<input type="text" name="active_record" id="id_active_record" style="display: none" >
<input type="number" step='any' name="active_duration" id="id_active_duration" style="display: none">
</form>
Ошибка
ValueError
could not convert string to float: ''
{
"csrfmiddlewaretoken": "vVhVRLrAUokmiNGRpzCaP78bnTOQyowf5VMfIDgKGglWGuEyQAU2wooWjQzXuBgD",
"active_duration": "",
"active_record": ""
}
Это потому, что active_duration пусто? Поможет ли это, если я установлю для форм значение blank= true, null= true?
Я предполагал, что каждое использование будет иметь значение для ввода. Также есть идеи о том, почему входные данные пусты? Может ли быть так, что пользователь использовал скрипты для пропуска страницы без видимых полей? Из сообщения об ошибке sentry это произошло с одним пользователем дважды.
Комментарии:
1. вы устанавливаете значение,
""
которое является пустой строкой, вам нужно установить для него значение с плавающей запятой по умолчанию (не уверен, что null будет работать)2. @Pete, должен ли я установить значение по умолчанию в html или models.py ?
Ответ №1:
Это потому, что вы не можете преобразовать пустую строку в float . Вы можете сделать это вместо этого, хотя:
active_duration=data.get('active_duration') or "0"
Это даст вам значение «0», если data[«active_duration»] пуст, False или None .
>>> data = {"foo": ""}
>>> data.get("foo") or "bar"
'bar'
Комментарии:
1. Привет, не могли бы вы подробнее объяснить разницу между
get('active_duration', 0)
иget('active_duration') or 0
? Спасибо2. Первый установит значение только в том случае, если ключ вообще не существует в dict, поэтому вы все равно получите пустую строку. Последний установит значение в 0, если: * Ключ отсутствует в dict * Значение ключа пустое, отсутствует или равно False