Python 如何优化Django FormView以提高数据库性能
我从来没有优化过我的Django代码,我也不确定我是否完全理解,所以你能告诉我这个FormView类是否可以以某种方式优化(我猜是的…) 我担心的代码部分是患者查找:Python 如何优化Django FormView以提高数据库性能,python,django,django-models,django-forms,Python,Django,Django Models,Django Forms,我从来没有优化过我的Django代码,我也不确定我是否完全理解,所以你能告诉我这个FormView类是否可以以某种方式优化(我猜是的…) 我担心的代码部分是患者查找:Patient.objects.get(patientId=self.kwargs['patientId'])-发生了3次。。。这是否意味着Django将命中数据库3次还是仅一次? 是否可以/应该对此进行优化,如果是,如何优化 class PatientNotes(SingleObjectMixin, FormView):
Patient.objects.get(patientId=self.kwargs['patientId'])
-发生了3次。。。这是否意味着Django将命中数据库3次还是仅一次?
是否可以/应该对此进行优化,如果是,如何优化
class PatientNotes(SingleObjectMixin, FormView):
slug_url_kwarg = 'patientId'
slug_field = 'patientId'
pk_url_kwarg = 'patientId'
template_name = "patient/patient_detail.html"
form_class = AddNewNoteForm
def get_queryset(self):
queryset = super(PatientNotes, self).get_queryset()
self.current_patient = Patient.objects.get(patientId=self.kwargs['patientId'])
my_result = queryset.filter(patient=self.current_patient)
return my_result
def post(self, request, *args, **kwargs):
self.object = Patient.objects.get(patientId=self.kwargs['patientId'])
return super().post(request, *args, **kwargs)
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.patient = Patient.objects.get(patientId=self.kwargs['patientId'])
self.object.note_created_by_date = datetime.date.today()
self.object.save()
return super().form_valid(form)
def get_success_url(self):
return reverse('PatientDetailView', kwargs={'patientId': self.object.patient.patientId})
这意味着您的视图包含将多次命中数据库的重复查询 使用 这被视为在单个请求期间进行的重复查询 修复此问题,考虑更新<代码>获取<代码> >代码> POST <代码>方法:将当前对象设置为<代码> No.<代码> > <代码/>代码>请求,在不需要更新现有对象的FaveVIEW中,<代码> POST <代码>方法将在保存窗体后设置当前对象。 我建议使用或,因为您试图设置
self.object
,即当前对象,因为它们用于处理表单,即仅验证和保存表单数据
模型字段不应为驼峰大小写Patient。patientId
应为Patient。Patient\u 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})
使用分析工具(例如,Pycharm
IDE拥有分析工具)或使用以下链接:
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})