python - 使用重定向将模型对象(具有许多字段)从视图函数传递到另一个视图函数而不保存它
问题描述
我是这个领域的新手...所以要温柔:) 问题可以表述如下: 视图1:提出了一个基于14个字段模型的表单。用户填写它并按下发布按钮。(重要:不在数据库中保存模型实例) 视图 2:出现一个确认页面,其中包含他输入的内容的摘要。然后他被要求 - 取消(不要费心擦除数据库中的任何内容) - 编辑(尚未保存但可以更改信息) - 确认(现在是时候将其保存在数据库中了)。
并且应该只能访问一次,如果没有完成......它会消失(避免在数据库中创建大量实例)
目前一切都是静态的,因为它从一开始就保存在数据库中并留在那里,所以如果有人离开,它就会毫无保留地留在数据库中
我寻找了一些解决方案,但总是破解以下错误。第一个是直接传递模型实例(Mycard),它登陆到>'str'对象没有属性'_meta'所以我希望通过URL传递信息,但看起来之后会很长......我也尝试过 request.session 但它说我的模型不是兼容的 JSON 文件 >“MyCardProfile”类型的对象不是 JSON 可序列化的。
我正在使用 Django 2.1.7
模型.py
class MyCardProfile(models.Model):
""" This model defines the fields required for a my card """
# identity of the post user
name = models.CharField(max_length=100)
email = models.EmailField(max_length=100)
# The Card information:
place = models.CharField(max_length=100)
# Short title description
title = models.CharField(null=True, blank=True, max_length=100, default='Check it')
description = models.CharField(max_length=1500)
# Managing
manager1 = models.CharField(null=True, blank=True, max_length=100)
manager2 = models.CharField(null=True, blank=True, max_length=100)
# Tracking
status = models.CharField(default='', max_length=50)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
end_at = models.DateTimeField(null=True, blank=True)
def __str__(self):
return self.title
表格.py
class MyForm(forms.ModelForm):
"""
Form for the Card
"""
name = forms.CharField(required=True, label='Name',widget=forms.TextInput(attrs={'id':'name'}))
title = forms.CharField(required=True, label='Short title', widget=forms.TextInput(attrs={'placeholder': 'Describe it in short','id':'title'}))
email = forms.EmailField(required=True, label='Email', widget=forms.TextInput(attrs={'placeholder': 'Your Email'}))
place = forms.CharField(required=True, label='Place', widget=forms.TextInput(attrs={'id':'place'}))
description = forms.CharField(required=False, label='Description', widget=forms.Textarea(attrs={'placeholder': 'Tell us something.'}))
class Meta:
model = MkProfile
fields = ['name', 'email', 'place', 'title', 'description', ]
视图.py
def formMy(request):
context = {}
context['pagename'] = "My form"
if request.method == 'POST':
My_card = MyForm(request.POST)
if My_card.is_valid():
Mycard = My_card.save(commit=False)
Mycard.manager = 'example1'
Mycard.manager2 = 'example2'
Mycard.save() #I would like to avoid that
return redirect('formMyconfirmation', id=Mycard.pk)
else:
My_card = MyForm()
pictures_form = MyPicturesForm()
context['Myform'] = My_card
return render(request, 'forms/formMy.html', context)
def formMyconfirmation(request, id):
##I would like to have access to the unsaved Mycard##
context = {}
context['pagename'] = 'My Card #'+str(id)+' confirmation'
Mycard = get_object_or_404(MyCardProfile, id=id)
context['meldekarte'] = Mycard
if request.method == 'POST':
##It's here that I would like to save Mycard##
return redirect('survey', id=Mycard.pk)
return render(request, "forms/formMyconfirmation.html", context)
网址.py
urlpatterns = [
path('My/', user_views.formMy, name='formMy'),
path('My_confirm/<int:id>/', user_views.formMy_confirmation, name='formMyconfirmation'),
path('My_edit/<int:id>/', user_views.formMy_edit, name='formMyedit'),
path('My_delete/<int:id>/', user_views.formMy_delete, name='formMydelete'),
path('survey/<int:id>/', user_views.survey, name='survey'),
]
我的愿望是不要将数据保存在 View1 (formMy) 中,而是将信息直接传递给 View2 (formMy_confirmation),然后在确认后保存...这样以后就没有人可以访问确认了(也许还有另一种方法去做)或用无用的信息填充数据库,如果它没有完成。
预先感谢您的任何帮助
解决方案
推荐阅读
- bash - 无法使用 crontab 运行脚本
- javascript - 向服务器发送信息时遇到问题
- c - 为什么用 C 语言编写的无操作程序即使在 GCC 中使用 -nostdlib 选项编译时也会占用 14KB?
- c# - 如何在 Microsoft 团队选项卡中获取 url 参数值
- javascript - 获取里面的文字
标记到
在 PHP 中,这是我设法从计算中得到的输出
<p id="generated">12345678199824,12345678411140,12345678921494,12345678497535,</p>
我需要这个值如下
<table> <tr> <td>12345
- javascript - 在构建 Vue.js 项目时使用 Gridsome 时出现 TypeError
- flutter - 如何在颤动中水平扩展导航抽屉内的折叠项目
- google-apps-script - Apps 脚本不使用 MailApp.sendEmail() 发送电子邮件
- javascript - 如何使用winston 和simple() 获得自定义输出?
- python - 为什么我不能修改作为函数内部参数传递的列表?