Если ваш вопрос «где мне сделать сложение», то нет «чисто технического» ответа - это технически законно и обоснованно, если вы поставите это в своем представлении, в вашей форме, в вашем сериализаторе, в вашей модели или даже в отдельной функции в пакете третьей части, если хотите.
НО там есть четкий ответ от дизайна POV. Хорошо структурированное приложение отделяет уровень домена от пользовательского интерфейса - уровень домена НЕ должен зависеть от интерфейса пользователя.
В Django пользовательский интерфейс состоит из представлений / сериализаторов (если вы создаете API REST) / templates / forms, а уровень домена в моделях в основном связан с уровнем доступа к данным (не обязательно хотя в классах Model
- некоторые части лучше реализованы как автономные функции или классы).
IOW, в вашем случае, предоставление результата сложения явно является ответственностью вашей модели Addition
. Это не означает, что вам следует добавить поле базы данных result
в вашу модель (это нарушит правила нормализации реляционной модели), просто добавьте метод get_result(self)
(или, поскольку операция здесь довольно дешевая, result
property
). Вам, конечно, придется настроить ваш сериализатор et c для возврата этого результата с вашими данными.
Примечание: вы также можете использовать аннотации orm Django, чтобы делегировать добавление в вашу базу данных (RDBMs). не просто для хранения данных, они могут выполнять довольно много операций с вашими данными, и чаще всего гораздо быстрее, чем чистый код Python). Это, конечно, немного излишне, но, поскольку это игрушечный учебный проект, вы можете попробовать это сделать и в образовательных целях.
В качестве общего руководства: ваш уровень домена должен обеспечивать все доменные логи c и ничего не знают об уровне пользовательского интерфейса, поэтому вы можете использовать его с различными пользовательскими интерфейсами (традиционный http / html пользовательский интерфейс, API отдыха, сценарии командной строки, собственный GUI и т. д.), и пользовательский интерфейс должен обрабатывать только презентацию / пользователя логи взаимодействия c и делегировать все остальное домену.