从 Django 中的通用 CreateView 转发 HTTP?
HTTP forward from generic CreateView in Django?
我有一个患者对象的 CreateView(简化):
from django.views.generic.edit import CreateView
import models
class PatientCreate(CreateView):
model = models.Patient
fields = ['name', 'country', ..]
# template_name is "patient_form.html" from CreateView
(我已覆盖 form_valid 和 get_context_data 以默认设置一些内容,例如 here,但我认为这无关紧要。)
如果同名患者已经存在,我想简单地通过 HTTP 转发到该患者的详细信息页面,而不是创建一个新的。
我该怎么做?
我正在使用 Django 1.11。
您可以在 form_valid
覆盖中添加此逻辑。例如:
def form_valid(self, form):
name = form.cleaned_data.get('name')
your_model_objects = YourModel.objects.filter(name=name)
if your_model_objects.exists(): # lazy query, won't hit the database
obj = your_model_objects.first() # as entry exists, fetch the first object
return redirect(reverse('detail-url', args=[obj.pk])
else:
return super(YourClass, self).form_valid(form)
我有一个患者对象的 CreateView(简化):
from django.views.generic.edit import CreateView
import models
class PatientCreate(CreateView):
model = models.Patient
fields = ['name', 'country', ..]
# template_name is "patient_form.html" from CreateView
(我已覆盖 form_valid 和 get_context_data 以默认设置一些内容,例如 here,但我认为这无关紧要。)
如果同名患者已经存在,我想简单地通过 HTTP 转发到该患者的详细信息页面,而不是创建一个新的。
我该怎么做?
我正在使用 Django 1.11。
您可以在 form_valid
覆盖中添加此逻辑。例如:
def form_valid(self, form):
name = form.cleaned_data.get('name')
your_model_objects = YourModel.objects.filter(name=name)
if your_model_objects.exists(): # lazy query, won't hit the database
obj = your_model_objects.first() # as entry exists, fetch the first object
return redirect(reverse('detail-url', args=[obj.pk])
else:
return super(YourClass, self).form_valid(form)