Python 如何优化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):

我从来没有优化过我的Django代码,我也不确定我是否完全理解,所以你能告诉我这个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})