gordon_shamway
@gordon_shamway

Как правильно убрать дублирующий код?

Допустим есть модель с "статус_выбор" где есть 3 поля?
как можно их отфильтровать чтобы не было много такого дублирующего кода?
class ClientTemplateListView(ListView):
	template_name = 'listClient'


class ClientNewListView(ClientTemplateListView):
	def get_queryset(self,):
		self.client = Client.objects.filter(status='1')
		return self.client

class ClientListView(ClientTemplateListView):
	def get_queryset(self,):
		self.client = Client.objects.filter(status='2')
		return self.client

class ClientBlackListView(ClientTemplateListView):
	def get_queryset(self,):
		self.client = Client.objects.filter(status='3')
		return self.client
  • Вопрос задан
  • 271 просмотр
Решения вопроса 1
crazyzubr
@crazyzubr
Python backend-developer
Как минимум два способа решения. Один - прописать нужный статус в url, другой - передавать как GET параметр.

В первом случае будет так:
# в urls.py
# ...
url('^mypage/(?P<status_num>[1-3])$', ClientListView.as_view()),
# ...
# в views.py

class ClientListView(ClientTemplateListView):

  def get_queryset(self,):
    self.client = Client.objects.filter(status=self.kwargs['status_num'])
    return self.client


Соответственно, если передавать GET параметров по ссылке вида /mypage?status_num=2

class ClientListView(ClientTemplateListView):

  def get_queryset(self,):
    self.client = Client.objects.filter(status=self.request.GET.get('status_num'))
    return self.client


В примере нет валидации для GET-параметра, потому что это уже другой вопрос.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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