Это означает, что ваше представление содержит дублированные запросы, которые будут попадать в базу данных несколько раз.
Использование
class PatientNotes(SingleObjectMixin, FormView):
...
def get_queryset(self):
...
# This will hit the database to fetch patient object.
self.current_patient = Patient.objects.get(patientId=self.kwargs['patientId'])
...
def post(self, request, *args, **kwargs):
# This will also hit the database to fetch patient object.
self.object = Patient.objects.get(patientId=self.kwargs['patientId'])
...
def form_valid(self, form):
...
# This will also hit the database to fetch patient object.
self.object.patient = Patient.objects.get(patientId=self.kwargs['patientId'])
...
Это считается дублирующими запросами, выполненными во время одного запроса.
Чтобы исправить это, рассмотрите возможность обновления методов get
и post
, задающих текущий объект равным None
для запроса get
в тех случаях, когда FormView не требует обновления существующего объекта, который установлен методом post
текущий объект после сохранения формы.
Я бы рекомендовал использовать UpdateView или CreateView , поскольку вы пытаетесь установить self.object
, то есть текущий объект, поскольку FormView предназначены для обработки формт.е. только проверка и сохранение данных формы.
Поле модели не должно быть в верблюжьем корпусе Patient.patientId
должно быть Patient.patient_id
, оно должно быть в нижнем регистре, отделенном подчеркиванием.
class PatientNotes(SingleObjectMixin, FormView):
model = Patient
slug_url_kwarg = 'patient_id'
slug_field = 'patient_id'
pk_url_kwarg = 'patient_id'
template_name = 'patient/patient_detail.html'
form_class = AddNewNoteForm
def get(self, request, *args, **kwargs):
self.patient_object = self.get_object()
return super().get(request, *args, **kwargs)
def post(self, request, *args, **kwargs):
self.patient_object = self.get_object()
return super().post(request, *args, **kwargs)
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.patient = self.patient_object
self.object.note_created_by_date = datetime.date.today()
self.object.save()
return super().form_valid(form)
def get_success_url(self):
# view names should be lower cased separated by underscores.
return reverse('patient_detail_view', kwargs={'patient_id': self.patient_object.patient_id})