【问题标题】:Can't display the data entered in form in database无法在数据库中显示表单中输入的数据
【发布时间】:2018-08-30 17:08:51
【问题描述】:

用户在表单中输入数据。但是在表单中输入的数据不会显示在数据库中。

views.py

def add(request):
    if request.method=='POST':
        form=FilesCreate(request.POST)
        if form.is_valid():
            form.save()
    return render(request,'plagiarism/page1.html',{'form':FilesCreate()})
def add2(request):
    if request.method=='POST':
        form2=FilesCreate2(request.POST)
        if form2.is_valid():
            form2.save()
    return render(request,'plagiarism/page2.html',{'form':FilesCreate2})

models.py

from django.db import models
class File1(models.Model):
    #user=models.ForeignKey(User)
    firstfile=models.CharField(max_length=1000, default="")
    #secondfile=models.CharField(max_length=1000)
    def __str__(self):
        return self.firstfile

剽窃/page1.html

<h1>Enter your first file</h1>
<form action="file2/" method="post">
    {% csrf_token %}
    {% for field in form %}
    {{field}}
    <input type="submit" value="Submit file1"/>

    {% endfor %}
</form>

plagiarism/page2.html(在第1页点击提交后显示页面)

<h1>Enter your second file</h1>
<form action="plagiarism/file2/result/" method="post">
    {% csrf_token %}
    {% for field in form %}
    {{field}}
    <input type="submit" value="Get Results"/>

    {% endfor %}
    </form>
{% block h1 %}

    {% endblock %}
<body>

plagiarism/page3.html(在第2页点击提交后显示页面)

<h1> Here is your Result </h1>
    <h2>
        {{data}}
    </h2>
</body>

forms.py

from django.forms import ModelForm
from django import forms
from plagiarism.models import File1,File2
class FilesCreate(ModelForm):
    class Meta:
        model=File1
        exclude=()
        widgets={'firstfile':forms.Textarea(attrs={'cols':50,'rows':100})}

example.py

from django.shortcuts import render
def getresult(request):
    data=95.5
    return render(request,'plagiarism/page3.html',{'data': data})

urls.py

from django.conf.urls import url
from . import views
from . import example3
urlpatterns=[

    url(r'^$',views.add,name='add'),
    url(r'file2/$',views.add2,name='add2'),
url(r'file2/result/$',example3.getresult,name='getresult')
]

【问题讨论】:

  • 你在哪里显示数据?但是请注意,尽管您检查了表单是否有效,但您并没有告诉用户它是否无效;或重定向离开。大概这里发生的事情是表单确实无效。
  • 当用户在表单中输入文本时,我希望我的数据进入数据库。如果表单是有效的,当用户点击提交时,页面被重定向到另一个页面(我被重定向到我在输入数据并点击提交时创建的另一个页面)
  • 您能出示您的urls.py 文件吗?
  • 我没有仔细阅读你的代码,我以为你在上传文件。您还需要显示视图add2,因为这是处理表单的内容。但是您不需要额外的视图,您可以使用add 处理表单。
  • 我已经根据你们中的一些人的要求更新了代码中的所有细节。我不想上传任何文件。我需要做的就是用户应该在表单中输入数据,输入的数据应该进入数据库。

标签: python django database pycharm


【解决方案1】:

您似乎想要一种向导,您可以在其中处理一个表单并将您重定向到下一个,但是您没有做好表单处理的基础知识。对于简单的表单处理,您可以这样做:

urls.py

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

urlpatterns=[
    url(r'^$',views.add,name='add'),
    url(r'file2/result/$', example3.getresult, name='getresult')
]

在模板中,您使用表单的action 调用file2,但您确实想调用同一个页面,以使用add 视图处理表单:

剽窃/page1.html

<h1>Enter your first file</h1>
<form method="post">
    {% csrf_token %}
    {% for field in form %}
    {{field}}
    {% endfor %}
    <input type="submit" value="Submit file1"/>
</form>

注意&lt;form&gt; 元素中缺少的action 属性。

当您访问网站的根目录时,将使用 GET 请求调用 add 视图。当您提交表单时,将调用相同的 add 视图,并带有 POST 请求,然后将处理该请求:

views.py

def add(request):
    if request.method == 'POST':
        form = FilesCreate(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect(reverse('getresult'))
    else:
        form = FilesCreate()
    return render(request,'plagiarism/page1.html',{'form': form})

注意HttpResponseRedirect,它在成功时重定向到一个新页面,else,它在您第一次访问该页面时创建一个空表单(即request.method不是POST,它是GET)。这样,如果表单无效,最后一行会将其绑定到已提交的数据并显示错误。

应该将您的数据导入数据库,这是您的第一个目标。如果您想在提交时转到另一个表单,您可以在那里重定向(而不是结果页面)并在视图add2 中执行与上述相同的操作。

以前有一个Django Form Wizard,但是你可以看到this project做多步表单。

【讨论】:

    猜你喜欢
    • 2015-10-04
    • 2020-12-01
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 2017-04-18
    • 2021-09-30
    相关资源
    最近更新 更多