Django Представления на основе классов обрабатывают несколько запросов - PullRequest
0 голосов
/ 07 февраля 2020

Я переписываю свой django вид функции в представления на основе классов. У меня есть текущая функция

@login_required
def settings(request, template_name="settings.html"):
    context = {}

    context['kcs'] = KlarnaProfile.objects.filter(user_profile__user=request.user)
    context['extends'] = ExtendProfile.objects.filter(user_profile__user=request.user)
    context['fortnoxs'] = FortnoxProfile.objects.filter(user_profile__user=request.user)
    return render(request, template_name, context)

, которая сначала подтверждает, если пользователь вошел в систему, а затем получает информацию, связанную с этой учетной записью пользователя

, вот что я получил в качестве своего представления на основе класса

class SettingsView(TemplateView):
    template_name = "settings.html"

    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super().dispatch(*args, **kwargs)

как добавить три фильтра, которые используют зарегистрированного пользователя в качестве фильтра?

1 Ответ

2 голосов
/ 07 февраля 2020

Используйте get_context_data метод, подобный этому:

class SettingsView(TemplateView):
    ...

    def get_context_data(self, **kwargs):
        context_data = super().get_context_data(**kwargs)

        context_data['kcs'] = KlarnaProfile.objects.filter(user_profile__user=self.request.user)
        ...

        return context_data

Аккуратный выбор. Вместо выполнения:

class SettingsView(TemplateView):
    ...

    @method_decorator(login_required)
    def dispatch(self, *args, **kwargs):
        return super().dispatch(*args, **kwargs)

Вы может сделать:

@method_decorator(login_required, name='dispatch')
class SettingsView(TemplateView):
    ...

Возможно, вы захотите прочитать Украшение класса из официальной документации Django.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...