将表单保存到数据库(Django Python)

Posted

技术标签:

【中文标题】将表单保存到数据库(Django Python)【英文标题】:Saving a Form to a Database (Django Python) 【发布时间】:2018-01-22 23:11:57 【问题描述】:

在我的 Django 应用程序中,我有一个包含电子邮件和文本区域的表单,需要进入数据库但我正在努力这样做。目前我的代码中有两种不同的解决方案:

【问题讨论】:

请将您的代码发布为文本而不是图像。它使人们更容易为您提供帮助。 精简图片 【参考方案1】:

好的,让我从头开始写。如果你现在和我一起做下面的步骤进行练习,也许会更好。

现在,完成上述任务的正确方法(我尝试更清楚地了解这个主题,因为我知道很多其他人会阅读这个问题并且他们也可以从中学习。理解它对于你未来的任务。

如果你想创建一个表单并且你知道你想要将提交的数据从那个表单保存到数据库,那么你当然应该从创建一个模型开始整个任务,因此在数据库。

所以,首先您创建一个模型(在这种情况下,您将调用它,即“问题”,因为您想调用您的表单,即 QuestionForm,因此最好将您的模型和表格与他们的名字也是)。

所以你的模型将在你的 models.py 文件中:

from django.db import models
# Create your models here.

class Questions(models.Model):
    contact_email = models.EmailField(max_length=60)
    question = models.CharField(max_length=600)

然后您将通过以下方式在 forms.py 文件中创建一个 ModelForm:

from django import forms
from django.forms import ModelForm, Textarea
from . import models

class QuestionForm(ModelForm):
    class Meta:
        model = models.Questions
        fields = ['contact_email', 'question'] 
        widgets = 
            'question': Textarea(attrs='cols': 40, 'rows': 20),
        

然后你在你的views.py文件中创建你的视图函数:

from django.shortcuts import render, redirect
from . import forms
from . import models
from django.http import HttpResponse

def get_question(request):
    form = forms.QuestionForm()

    if request.method == 'POST':
        form = forms.QuestionForm(request.POST)
        if form.is_valid():
            form.save()
            return redirect(‘success.html’) # or you redirect anywhere you want to
    else:
        form = forms.QuestionForm()

    return render(request, 'contact.html', 'form':form)

此时您将在 urls.py 中创建 urlpattern 以调用 get_question 视图函数。它将如下所示:

from django.conf.urls import url
from basic_app import views

# app_name = 'basic_app' # Important for referencing urls in HTML pages(use your own app_name here). But for this example task this is not important.

urlpatterns = [
url(r'^$', views.home, name='home'),
url(r'^questions/', views.get_question, name="questions_page"),
]

我希望我没有让你更加困惑。如果您执行上述步骤,它应该适合您。您可以通过上述步骤创建任意数量的表单并将它们轻松保存在数据库中。

您必须运行上述程序的唯一另一件事是您已经拥有并且已经创建的“contact.html”页面。

(别忘了运行:python manage.py migrate)

所以,我希望您看到,在上面的示例中,您没有不匹配字段和字段名称,并且您不会对将什么保存在哪里感到困惑。由于模型和表单是一起工作的,并且使用相同的字段名称一起创建。

【讨论】:

有效!非常感谢 :) 与我以前的模型结构有冲突,这就是它第二次无法工作的原因。

以上是关于将表单保存到数据库(Django Python)的主要内容,如果未能解决你的问题,请参考以下文章

django ajax 不会将表单保存到数据库

我无法将表单数据保存到 django 中的数据库

django 编辑表单,数据怎么回显呀

Django:无法将空表单字段保存到数据库 - 以 10 为基数的 int() 的无效文字:''

Django:表单未保存到数据库

Django表单数据未保存到数据库