платформа django rest — обновление переменной класса ModelViewSet

#python #django #django-rest-framework

Вопрос:

У меня есть набор представлений моделей, который выглядит следующим образом

 class BusinessViewSet(ModelViewSet):
    filterset_class = BusinessFilter
    serializer_class = BusinessSerializer
    ordering_fields = [
        "source",
        "xl_source",
        "company_name",
        "contact_title",
        "category",
        "contact_name",
        "description",
        "tags",
        "business_hours",
        "location",
        "website",
        "phone",
        "email",
        "social_media",
        "address",
        "is_ecommerce",
        "is_verified",
        "ownership",
        "supplemental_information",
        "products",
        "location_street",
        "location_city",
        "location_state",
        "location_zip",
    ]

    def get_queryset(self):

        referer = self.request.META["HTTP_REFERER"]
        try:
            source = referer.split("source=")[1]
        except Exception as e:
            print(e)
            source = None

        if source == None:
            queryset = Business.objects.all()
        elif source == 'SBASpecial':
            queryset = SBABusiness.objects.all()
            self.serializer_class = SBABusinessSerializer
            self.filterset_class = SBABusinessFilter
            self.ordering_fields = [
                'name_and_trade_of_firm',
                'contact',
                'address_city',
                'capabilities_narrative',
                'ownership_self_certs',
                'email_address',
                'www_page_url',
                'phone_number',
                'year_established',
                'keywords',
                'naics_codes',
            ]
        else:
            queryset = Business.objects.filter(xl_source=source)

        return queryset
 

Как вы можете видеть, если source это SBASpecial так , я пытаюсь изменить переменные класса serializer_class , filterset_class , и ordering_fields внутри get_queryset . Очевидно, что это не работает. Я просмотрел документацию по фреймворку django rest, и там нет ничего, что могло бы помочь мне с этой проблемой. Что я могу сделать? Любая помощь будет признательна. Заранее спасибо

Комментарии:

1. def get_serializer_class(self): — — — попробуйте использовать класс get_serializer_class

2. смогу ли я также установить здесь self.ordering_fields?

3. Вы можете переопределить dispatch это, но я думаю, что поведение представления от реферера IMO-это запах