In MVC (eg. Django) what's the best place to put your heavy logic? In MVC (eg. Django) what's the best place to put your heavy logic? django django

In MVC (eg. Django) what's the best place to put your heavy logic?


From the Django docs

Adding extra Manager methods is the preferred way to add "table-level" functionality to your models.

  1. Create a module with that logic (year_employee.py)
  2. Lets say you have a model Employee, so, you should create class for managing employees:

    class EmployeeManager(models.Manager)    def of_the_year(self):        from year_employee import my_calc_func        return my_calc_func()

Then add this manager to your model

class Employee(models.Model):    [...]    objects = EmployeeManager()

After that you could simply do this:

chosen_employee = Employee.objects.of_the_year()


As for django, the best place to put business logic is inside models. The view should be clean from business logic and should only be used to get the data to be displayed/presented on template or in other words let the view be used for view logic only.

From django FAQ:

In our interpretation of MVC, the “view” describes the data that gets presented to the user. It’s not necessarily how the data looks, but which data is presented. The view describes which data you see, not how you see it. It’s a subtle distinction.

By putting your business logic under models, it will lead you to unit test easier because models is not coupled with HTTP methods or processing.


  1. putting logic in View will not allowyou to write unit tests easily andcan't reuse effectively.This saysthat you should never put thecomplex logic in a view you shouldseparate it from the view.
  2. If logic is closely tied to a(class/objects of a class) puttingthat logic in the model makes sense.
  3. In case the logic is closely tiedmultiple objects/classes you can useone of the model to put logic or youcan create a service object (or when the code is too huge) whichwill handle this logic.