【问题标题】:save() method does not save form data to the database (Django ModelForm)save() 方法不将表单数据保存到数据库(Django ModelForm)
【发布时间】:2020-12-26 05:07:24
【问题描述】:

我正在使用 Django 制作一个简单的待办事项列表,它工作正常,只是输入到表单中的任何数据都不会保存到数据库中(并且不会显示)。

我的models.py:

    from django.db import models

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

        def __str__(self):
            return self.content

forms.py:

from .models import TodoListItem
from django.forms import ModelForm

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

views.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 django django-forms modelform


    【解决方案1】:

    您输入的表单操作不正确

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

    您必须将此网址放入表单操作enter_task

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

    【讨论】:

      【解决方案2】:

      看起来您的表单操作正在将表单发送到您的主页,而不是指向 enter_task 视图的 URL。如果没有看到您的 urls.py,我不确定这一点,但这就是我要检查的内容。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-07
        • 1970-01-01
        • 2013-08-19
        • 1970-01-01
        • 1970-01-01
        • 2018-10-10
        • 2020-10-11
        相关资源
        最近更新 更多