用户在表单中输入数据。但是,表单中输入的数据不会显示在数据库中。
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')
]
答案 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
不是POST
,GET
)。这样,如果表单无效,最后一行将呈现它绑定到已提交的数据并显示错误。
此 应该将数据导入数据库,这是您的第一个目标。如果您想在提交时转到另一个表单,可以在那里重定向(而不是结果页面),并在视图add2
中执行与上面相同的操作。
曾经有一个Django表单向导,但你可以看到this project做多步表单。