Я пытаюсь уменьшить количество дублированных запросов при использовании CBV, таких как DetailView
, а затем переопределяю get_context_data
для фильтрации модели на основе связанных моделей.
Прямо сейчас у меня есть DetailView
для модели PatientCase
и я хочу создать две переменные в контексте для связанной модели CasePhotos
, связь между ними - через внешний ключ для модели CasePhoto
.
class CasePhoto(models.Model):
...
patient_case = models.ForeignKey(PatientCase, on_delete=models.CASCADE)
photo = models.URLField()
is_mentor_edit = models.BooleanField(default=False)
...
Теперь я знаю, что это плохо, но я не могу найти правильный оптимальный способ сделать это. Некоторые рекомендации и даже лучше некоторые ссылки на документацию, которые я где-то упустил, были бы еще лучше.
class ReviewCaseView(DetailView):
model = PatientCase
def get_context_data(self, **kwargs):
patient_case = self.get_object()
context = super().get_context_data(**kwargs)
case_photos = CasePhoto.objects.filter(patient_case=patient_case)
context['case_photos'] = case_photos.filter(is_mentor_edit=False)
context['mentor_photos'] = case_photos.filter(is_mentor_edit=True)
return context
Я знаю, что дублирование - это строка 5 patient_case = self.get_object()
, поскольку detail.py
вызывает get_object
, что и создает первый запрос. Есть ли способ кэширования этого для повторного использования в get_context_data
или, может быть, лучше без get_context_data
вообще?