Большинство моих расчетов в views.py, как убрать или сделать правильно?

У меня есть некоторые расчеты, которые помогают мне найти общую сумму заработка учителей. они складываются из количества проведенных ими уроков, их ставки, их расходов и т.д. куда это должно быть помещено, поскольку я уверен, что это не в правильном месте и может быть намного более эффективным?

я думал о том, чтобы сделать часть работы в models.py как @property, но не уверен, как это сделать или даже если это так необходимо.

любая помощь будет оценена по достоинству, спасибо.

 def accounts(request):
    lessons=Lessons.objects.all()

    basic_band= lessons.filter(price_band="BASIC")
    top_band=lessons.filter(price_band="TOP")
    native_band=lessons.filter(price_band="NATIVE")

    basic_count=basic_band.count()
    top_count=top_band.count()
    native_count=native_band.count()

    native_house_rate   =0.25
    top_house_rate    =0.30

    basic_rate=300
    top_rate=400
    native_rate=700


    ##earnings
    basic_earning= basic_count * basic_rate
    top_earning= top_count * top_rate
    native_earning= native_count * native_rate
    ##fees
    native_house_fee=native_earning * native_house_rate
    top_house_fee=top_earning * top_house_rate
    ##totals    
    total_top = top_earning - top_house_fee
    total_native = native_earning - native_house_fee

    total_earning= total_top + total_native
    total_gross_earning=top_earning + native_earning

    monthly_top= total_top * 4
    monthly_native= total_native * 4

    monthly_total= monthly_top + monthly_native

    context{"total_gross":total_gross_earning,"native_number":native_earning,
    "top_number":top_earning,"basic_number":basic_earning, "basic":basic_count, 
    "top":top_count,"native":native_count, "native_fee":native_house_fee, 
    "top_fee":top_house_fee, "top_rate":top_rate, "native_rate":native_rate,
    "basic_rate":basic_rate,"total":total_earning,
    "native_house_rate":native_house_rate,"top_house_rate":top_house_rate,
    "total_top":total_top, "total_native":total_native, "monthly_top":monthly_top, 
    "monthly_native":monthly_native,"monthly_total":monthly_total}
    return render(request, "accounts.html", context)
Вернуться на верх