python - ModelForm form_valid() 函数的成功/重定向 URL 问题
问题描述
我在重写 a 的form_valid()
方法时遇到了一些困难CreateView
。
我有一个ModelForm
用户可以注册新患者的地方。表单由CreateView
. 我已经覆盖了form_valid()
视图的方法,因为我首先需要将用户与患者联系起来,然后评估患者的详细信息(即表单中的数据)是否符合某些标准。如果不满足标准,则不会保存患者/表格,并且用户会收到错误消息。如果他们符合条件,则保存患者/表格,并且用户会收到成功消息。表单/视图的此功能正在工作 - 在下面的测试代码中,我有一个布尔值“is_eligible”,稍后我将用它代替适当的标准。当is_eligible == True
模型保存时我收到一条成功消息,当它== False
不保存时我收到error
消息。
如果患者不符合条件,我的问题是处理成功 url 和重定向。我希望它回到我设置的“仪表板”,但每次我都会得到一个
DisallowedRedirect at /dashboard/patients/register
Unsafe redirect URL with protocol 'accounts'
如果有人可以提供有关如何完成这项工作的见解/建议,将不胜感激。
我当前的代码:
表格.py
class PatientRegisterForm(forms.ModelForm):
class Meta:
model = Patient
fields = ['first_name', 'last_name', 'is_eligible']
视图.py
class PatientRegisterView(LoginRequiredMixin, CreateView):
model = Patient
form_class = PatientRegisterForm
template_name = 'patients/register.html'
success_url = 'accounts:dashboard'
def patient_eligible(self, test):
if not test.is_eligible:
return False
else:
return True
def form_valid(self, form):
form.instance.provider = self.request.user
test = form.save(commit=False)
if self.patient_eligible(test):
messages.success(self.request, 'Patient registered successfully!')
test.save()
return super().form_valid(form) # fails here if eligible
else:
messages.error(self.request, 'Patient not registered')
return redirect(self.request, 'accounts:dashboard') # fails here if not eligible
解决方案
首先,我认为您不需要将 self.request 作为重定向的第一个参数传递。
从文档重定向应该是这样的
redirect(to, permanent=False, *args, **kwargs)
但是导致您的错误的真正问题是您没有反转 url。你需要做的是:
from django.shorcts import reverse_lazy
..
success_url = reverse_lazy('accounts:dashboard')
..
return redirect(reverse('accounts:dashboard'))
推荐阅读
- python - 如何生成 URL 以从 S3 存储桶下载文件
- angular - Angular Transferstate 预渲染了两次 - html 中的 2 个 app-state 脚本标签和 2x 由 Angular 注释预渲染
- javascript - 结合 limitToFirst() 和 limitToLast() 会导致意外行为
- java - How to get all values from a table in spring boot with where condition?
- node.js - Socket.IO - 客户端在中间件错误后不断尝试重新连接
- python-3.x - 在具有 `spec=True` 的模拟方法上使用 `__name__`
- migration - 将 SharePoint 站点从多租户场备份和还原到单独的场
- excel - 将 Excel 用户表单数据发布到匹配条件的多行
- python - 在 macbook m1 上安装 h5py 一直失败
- ios - 将构建分发到应用商店连接时出现应用商店连接操作错误