#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-это запах