Как использовать функцию get_queryset() в миксине - DRF
У меня есть два набора представлений в разных файлах views.py, один из которых связан с моделью A, а другой - с моделью B
class AViewSet(ModelViewSet,CustomMixin):
a_qs = self.filter_queryset(self.get_queryset())
lst = []
def get_lst:
for a in a_qs:
lst.append(a)
return lst
class BViewSet(ModelViewSet,CustomMixin):
b_qs = self.filter_queryset(self.get_queryset())
lst = []
def get_lst:
for b in b_qs:
lst.append(b)
return lst
class CustomMixin:
@action(detail=False, methods=['get'])
def do_smth(self):
result_list = self.get_list()
Пока часть self.filter_queryset(self.get_queryset())
является общей для обоих наборов представлений, могу ли я поместить ее в миксин? Как это будет работать?
CustomMixin
может быть излишним усложнением в этом случае - вы можете просто сделать CustomViewSet
как общий набор представлений для обоих
class AViewSet(CustomViewSet):
pass
class BViewSet(CustomViewSet):
pass
class CustomViewSet(ModelViewSet):
qs = self.filter_queryset(self.get_queryset())
lst = []
def get_lst:
for a in qs:
lst.append(a)
return lst
@action(detail=False, methods=['get'])
def do_smth(self):
result_list = self.get_list()
UPD после обновления вопроса - намерение добавить целое число к объекту немного странно, однако, как общий подход это можно сделать, используя пользовательский метод для каждого класса. Т.е. весь общий код будет в CustomViewSet
- различия будут реализованы классами, наследующими от него
class AViewSet(CustomViewSet):
def _proccess_value(v):
return v * 2
class BViewSet(CustomViewSet):
def _proccess_value(v):
return v + 2
class CustomViewSet(ModelViewSet):
qs = self.filter_queryset(self.get_queryset())
lst = []
def _process_value(v):
raise NotImplemented()
def get_lst:
for a in qs:
lst.append(self._proccess_value(a))
return lst
@action(detail=False, methods=['get'])
def do_smth(self):
result_list = self.get_list()