我正在开发一个 Django 项目,为了使表单体验更加流畅,我想将 ModelForm 分布在几个页面上。如果登录的用户可以在不实际发布内容的情况下在表单中保存他们的进度,那将是理想的(在这种情况下,一个JobApplication
,用户可以在其中返回填写信息而无需实际发送申请)。
目前我已经查看了关于 SO 的其他答案,例如 this one ;但这仅向我展示了如何利用缓存在存在表单的 View 之间存储信息。
Models.py(模型、表单和 View 已简化以提高可读性):
class JobApplication(models.Model):
job = models.ForeignKey(JobPost,on_delete=models.SET_NULL,...)
user = models.ForeignKey(AUTH_USER_MODEL,...)
details = models.CharField(max_length=300)
skills = models.CharField(max_length=300)
feedback = models.CharField(max_length=300)
#... [insert more fields] ...
表格.py:
class Application(forms.ModelForm):
details = forms.CharField() # To go in page 1 of the form process
skills = forms.CharField() # To go in page 2
feedback = forms.CharField() # To go in page 3
class Meta:
model = JobApplication
fields = ['details','skills','feedback']
Views.py:
from . import forms
def view1(request):
form = forms.Application()
if request.method == 'POST':
form = forms.Application(data=request.POST)
... some logic here which I am not sure of ...
return render(request, 'view1.html', {})
def view2(request):
form = forms.Application()
if request.method == 'POST':
form = forms.Application(data=request.POST)
...
return render(request, 'view2.html', {})
def view3(request):
form = forms.Application()
if request.method == 'POST':
form = forms.Application(data=request.POST)
...
return render(request, 'view3.html', {})
请注意,我很乐意编辑我的表单或模型来实现这种多页、保存进度效果,您可能会在求职网站上看到这种效果。
如果我可以添加更多有用的代码,请告诉我,因为我不太确定还需要什么。
谢谢!
最佳答案
我在我的应用程序中有一个类似的用例,我所做的是创建的 多个模型和一个中央 View 控制 表单的进度。
View 有一个必须传播的表单列表
GET : /form/<index> => form/0 POST : Save data to the form
最初表单将没有初始数据,对于索引 > 0 初始数据将是之前保存的模型对象
当用户点击下一步时,增加 URL 索引计数器,减少 它为上一个,不要在跳过时保存任何内容
这是它的外观要点。 https://gist.github.com/bhavaniravi/b784c57ae9d24fce359ae44e2e90b8e3
I don't know if this is the best optimized method of all times but this is what I did. Any suggestions on improvement is most welcomed
关于python - Django - 跨多个 View 形成并保存进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49338302/