无法在数据库中显示以表格形式输入的数据

时间:2018-03-21 14:16:01

标签: python django database pycharm

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

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')
]

1 个答案:

答案 0 :(得分:0)

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

<强> 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')
]

在模板中,您使用表单file2调用action,但您确实想要调用同一页面,以使用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>

请注意action元素中缺少的<form>属性。

当您访问网站的根目录时,add视图将通过GET请求进行调用。提交表单后,系统会调用相同的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不是POSTGET)。这样,如果表单无效,最后一行将呈现它绑定到已提交的数据并显示错误。

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

曾经有一个Django表单向导,但你可以看到this project做多步表单。