HTTP вперед из общего CreateView в 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, чтобы установить несколько параметров по умолчанию, см., например, здесь, но я думаю, что это не имеет значения. )

Если пациент с таким именем уже существует, я бы хотел просто перенаправить HTTP на страницу сведений об этом пациенте, а не создавать новую.

Как я могу это сделать?

Я использую Джанго 1.11.


person dfrankow    schedule 21.11.2018    source источник


Ответы (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)
person ruddra    schedule 21.11.2018