Почему при добавлении чего-либо в базу данных я получаю только значения по умолчанию? (Django)
Я пытаюсь добавить задачи в свой список дел. Все мои добавленные задачи отображаются на главной странице (home.html), но когда я пытаюсь добавить что-то, он всегда устанавливает значение по умолчанию (я добавил картинку в конце). Я знаю, что написал 'default_value' в views, но я хотел проверить, добавляет ли он вообще todos без ошибки.
views.py
def newTodo(request):
obj = List()
obj.taskText = request.POST.get("taskText", "default_value")
obj.taskDate = request.POST.get("taskDate", "default_value")
obj.taskDerc = request.POST.get("taskDerc", default= 5)
obj.save()
mydict = {
"all_tasks" : List.objects.all()
}
return render(request, 'newTodo.html', context=mydict)
newTodo.html (с использованием Bootstrap)
<tbody>
{% block content %}
<tr>
<form action="{% url 'newTodo' %}">
<td scope="row">
<input type="text" class="form-control" id="taskText" name="taskText"></td>
<td scope="row">
<input type="text" class="form-control" id="taskDate" name="taskDate"></td>
<td scope="row">
<input type="text" class="form-control" id="taskDerc" name="taskDerc"></td>
<td><a href="{% url 'home' %}" class="btn btn-success" role="button">
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-check" viewBox="0 0 16 16">
<path d="M10.97 4.97a.75.75 0 0 1 1.07 1.05l-3.99 4.99a.75.75 0 0 1-1.08.02L4.324 8.384a.75.75 0 1 1 1.06-1.06l2.094 2.093 3.473-4.425a.267.267 0 0 1 .02-.022z" />
</svg>
</a>
</td>
</form>
</tr>
{% endblock %}
</tbody>
Что я упускаю? Любая помощь будет принята с благодарностью!
Я могу ошибаться, но попробуйте заменить эти строки кода в вашем файле newTodo.html :
<a href="{% url 'home' %}" class="btn btn-success" role="button"><!–– your SVG ––></a>
чем-то вроде
<button type="submit" class="btn btn-success"><!–– your SVG ––></button>
Я думаю, что в настоящее время у вас нет способа отправить данные в вашей форме, вам нужно button из type "submit", чтобы данные были отправлены на URL формы (см. здесь для более подробной информации).
Это не является прямым ответом на ваш вопрос, но, кстати, вот несколько советов по улучшению вашего кода:
- Не называйте свою модель
List, это может привести к путанице со встроенным в Pythonlist(), который возвращаетlist, .
- Проверьте, что запрос является POST-запросом, прежде чем пытаться получить доступ к
request.POST, иначе вы можете получить500 internal server error. Используйте, например, декораторrequire_POST()(см. документацию), - Добавьте CSRF-токен
{% csrf_token %}в вашу HTML форму и сделайте его обязательным в POST запросе, например, добавив декоратор@requires_csrf_tokenв ваше представление (посмотрите эту страницу для получения дополнительной информации о CSRF в Django), - Наконец, как было предложено в комментарии @Erik Kalkoken, вы должны использовать API форм Django как можно больше и избегать создания форм с нуля. Это сэкономит вам часы работы и будет намного чище.
Пожалуйста, не забудьте принять этот ответ, если он помог.
