@alp-rostov

Как можно кэшировать queryset?

Есть вьюха, в ней через цикл показывается modelformset_factory (список форм). Формы заполняются данными из модели. В каждой форме есть поле типа ModelChoiceField, где выпадающий список формируется queryset, я его задаю явно.
В итоге при генерации ModelChoiceField, джанго каждый раз запрашивает однотипные данные из БД.
Например если у меня 5 форм, то и соответсвенно выполняется 5 однотипных запросов для этого поля.
Вопрос как при генерации вьюхи как-то кэшировать queryset.

class InvoiceCreate(FormView):
    template_name = 'invoice.html'
    context_object_name = 'invoice'

    def get_form(self, form_class=None):
        InvoiceFormSet = modelformset_factory(Invoice, form=InvoiceForm, exclude=('order_id',))
        formset = InvoiceFormSet(queryset=Invoice.objects
                                 .filter(order_id=self.kwargs.get('order_pk'))
                                 .select_related('service_id')
                                 .defer('service_id__type'))
        return formset

class InvoiceForm(forms.ModelForm):
    service_id = forms.ModelChoiceField(
        label='',
        queryset=Service.objects.all()
    )
    class Meta:
        model = Invoice
        fields = ('service_id',  'quantity_type', 'quantity', 'price',)
  • Вопрос задан
  • 27 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы