Как я могу зарефакторить код?

def dashboard(request):
    if request.user.is_superuser:
        usr = request.user
        inform = Products.objects.filter()
        urls = cart.objects.filter()
        return render(request, 'dashboard.html', {'urls': _paginator(request, urls), 'inform': inform})
    else:
        usr = request.user
        inform = Products.objects.filter()
        urls = cart.objects.filter(user=usr)
        _paginator(urls, request)
        return render(request, 'dashboard.html', {'urls': _paginator(request, urls)})

Подскажите, каким образом я могу правильно сделать рефакторинг, при условии, что фильтры urls разные?


Ответы (1 шт):

Автор решения: digital-mag

Если вы хотите чуть сократить количество строчек кода, то можно так:

def dashboard(request):
    urls = cart.objects.filter(**({user: request.user} if request.user.is_superuser else {}))
    return render(
        request, 
        'dashboard.html', 
        {
            'urls': _paginator(request, urls),
            'inform': Products.objects.all() if request.user.is_superuser else None
        }
    )

но это может несколько затруднить отладку

→ Ссылка