我正在try 通过表单数据发送到我的数据库作为我的任务模型的新对象.当我点击提交按钮时,它只会将我重定向到我的其他页面,提交的数据不会发生任何变化,数据也不会保存到我的数据库中.我在多个来源寻找解决方案,但没有找到一个.我不喜欢这个话题,所以每个反馈都是很棒的.

我的问题:

  1. 我在哪里犯了错
  2. 如果我在admin.py(来自标题字段)中预先填充了slug字段,当我排除我的slug字段时,它是否会预先填充到表单中?

如能提供有用的知识来源,我将不胜感激.

Model.py

class Task(models.Model):
    is_done = models.BooleanField(default=False)
    title = models.CharField(max_length=100)
    add_time = models.DateTimeField(auto_now_add=True)
    deadline = models.DateTimeField()
    user = models.ForeignKey(User, on_delete=models.CASCADE, related_name="user")
    slug = models.SlugField()
    description = models.TextField()

Forms.py

from django import forms
from .models import Task


class TaskForm(forms.ModelForm):
    class Meta:
        model = Task
        exclude = ["add_time", "is_done"]

模板模板

        <form method="post" class="form" action="{% url 'add-task' %}">
            {% csrf_token %}
            <p>Title: {{ form.title }}</p>
            <p>Deadline: {{ form.deadline }}</p>
            <p>User: {{ form.user }}</p>
            <p>Description: {{ form.description }}</p>
            <button type="submit">Submit</button>
        </form>

Views.py

def add_task(request):
    if request.method == 'POST':
        form = TaskForm(request.POST)
        if form.is_valid():
            form.save()
        return HttpResponseRedirect("/todolist")

    form = TaskForm()
    return render(request, "todolist/add_task.html", {"form": form})

推荐答案

很可能该表单是无效的,但是因为您构造了一个新的表单,所以即使该表单有效,您也看不到错误.

from django.shortcuts import redirect

def add_task(request):
    if request.method == 'POST':
        form = TaskForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return redirect('name-of-todolist-view')
    else:
        form = TaskForm()
    return render(request, 'todolist/add_task.html', {'form': form})

在模板中,您应该呈现这with个错误,因此:

<form method="post" class="form" action="{% url 'add-task' %}">
    {% csrf_token %}
    {{ form.non_field_errors }}
    <p>Title: {{ form.title }} {{ form.title.errors }}</p>
    <p>Deadline: {{ form.deadline }} {{ form.deadline.errors }}</p>
    <p>User: {{ form.user }} {{ form.user.errors }}</p>
    <p>Description: {{ form.description }} {{ form.description.errors }}</p>
    <button type="submit">Submit</button>
</form>

然而,可能的问题是,表单中包含了您的slug,但您没有呈现它:

从Django导入表单 从.Models导入任务

class TaskForm(forms.ModelForm):
    class Meta:
        model = Task
        exclude = ['add_time', 'is_done', 'slug']

Note:可以利用django-autoslug [GitHub]根据其他字段自动创建一个插件(S).


Note:通常情况下,使用settings.AUTH_USER_MODEL [Django-doc]来引用用户模型比直接使用User model [Django-doc]要好.欲了解更多信息,您可以查看referencing the User model section of the documentation.


Note:虽然大多数表单不处理媒体文件,但最好还是将request.FILES [Django-doc]传递给表单,这样,如果以后添加额外的媒体字段,使用该表单的所有视图确实可以正确地处理这些文件.

Django相关问答推荐

当RST =True时RST CSS

查尔而不是瓦尔查尔加盟Django 球场

如何根据属性的 Select 对查询集进行排序

执行官/start.sh:没有这样的文件或目录

try 在 django 中发送验证邮箱,出现错误

如何在Django管理自定义筛选器中包含自定义模型方法?

更新或创建异步 Django ORM 实例

如何将数据库中的 None 序列化为空对象?

在模板中调用 FileField 对象会呈现不正确的路径

防止 django 将_id附加到外键字段

将网络测功机添加到 Heroku django 应用程序时如何克服Coudn't find that formation错误?

测试 Django ModelForm 是否有实例

virtualenv(python3.4), pip install mysqlclient 错误

django类型对象Http404没有属性get

测试 Django 信号的正确方法

在python中查找对对象的所有引用

django 在 unittest 测试中设置环境变量

将 Django Rest Framework 与序列化程序一起使用时出现 AttributeError

响应发送到客户端后在 Django 中执行代码

Django:AppRegistryNotReady()