Упрощение кода функций при сохранении удобочитаемости
Этот код работает, но кажется мне слишком избыточным.
Можно ли как-то упростить его, сохранив функциональность и читабельность?
has_videos = self.request.query_params.get('has_videos')
if has_videos:
if has_videos == 'true':
entries = User.objects.filter(videos__isnull=False)
elif has_videos == 'false':
entries = User.objects.filter(videos__isnull=True)
else:
entries = User.objects.all()
Я попытался написать в одну строку, используя тернарный оператор, но читабельность полностью исчезла
entries = Pet.objects.all() if has_photos not in ['true', 'false'] \
else Pet.objects.filter(photos__isnull=False) if has_photos == 'true' \
else Pet.objects.filter(photos__isnull=True)
Удалите внешний оператор if.
if has_videos == 'true':
entries = User.objects.filter(videos__isnull=False)
elif has_videos == 'false':
entries = User.objects.filter(videos__isnull=True)
else:
entries = User.objects.all()
Меньше дублирования, все еще читабельно(?).
d = {'true':False, 'false':True}
try:
entries = User.objects.filter(videos__isnull=d[has_videos])
except KeyError:
entries = User.objects.all()