从Django中的通用CreateView转发HTTP?

时间:2018-11-21 19:53:29

标签: django django-generic-views

我有一个用于患者对象的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。

1 个答案:

答案 0 :(得分:1)

您可以在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)