Метод save() не сохраняет данные формы в базу данных (Django ModelForm)

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

Мои модели.py:

    from django.db import models

    class TodoListItem(models.Model):
        content = models.TextField()

        def __str__(self):
            return self.content

формы.ру:

from .models import TodoListItem
from django.forms import ModelForm

class TodoListForm(forms.ModelForm):
    class Meta:
        model = TodoListItem
        fields = ['content']

просмотров.py:

from django import forms
from django.shortcuts import render
from django.http import HttpResponseRedirect, HttpResponse
from .models import TodoListItem
from .forms import TodoListForm

def home(request):
    context = {
        'items': TodoListItem.objects.all()
    }
    return render(request, 'home.html', context)

def enter_task(request):
    if request.method == 'POST':
        form = TodoListForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/')
        else:
            return HttpResponse('Form not valid')
    else:
        form = TodoListForm()
    return render(request, 'form.html', {'form': form})

Я сделал это в соответствии с документацией, но я не понимаю, почему строка form.save() не будет выполняться, когда return HttpResponseRedirect('/') прямо под ней выполняется.

Файл form.html на всякий случай:

<!DOCTYPE html>
<html>
    <head>
        <title>Add task</title>
        <h1>Add Task</h1>
    </head>
    <body>
        <form action = "{% url 'home' %}" method = "post">
            {% csrf_token %}
            {{ form }}
            <input type = "submit" value = "Submit">
        </form>
    </body>
</html>

Я знаю, что ошибка должна быть в views.py, потому что я использовал сайт администратора для добавления в TodoListItem вручную, и html-файл отлично отображает его, просто всякий раз, когда я отправляю форму, она никогда не сохраняется в вышеупомянутой модели.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
0
1 069
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Бывает, что вы неправильно ввели действие формы

<form action = "{% url 'home' %}" method = "post">
   {% csrf_token %}
   {{ form }}
 <input type = "submit" value = "Submit">
</form>

вы должны поместить этот URL в действие формы enter_task

        <form action = "{% url 'enter_task' %}" method = "post">
            {% csrf_token %}
            {{ form }}
            <input type = "submit" value = "Submit">
        </form>

Похоже, ваше действие формы отправляет форму на вашу домашнюю страницу, а не URL-адрес, который указывает на представление enter_task. Я не знаю этого наверняка, не видя вашего urls.py, но это то, что я бы проверил.

Другие вопросы по теме