Один из способов сделать это - сигнал предварительного сохранения . Он будет запущен непосредственно перед сохранением любого экземпляра модели и получит логический аргумент created
, который позволит вам установить цену, только если объект новый.
Существует также сигнал после сохранения, если по какой-то причине вы хотите сделать это после сохранения, например, потому что ваше поведение зависит от PK нового экземпляра. Но предварительное сохранение должно работать здесь.
Кроме того, вы можете переопределить метод save
класса модели. https://docs.djangoproject.com/en/2.1/topics/db/models/#overriding-model-methods
См. Этот ответ для некоторого обсуждения плюсов и минусов двух подходов: Сигналы Джанго против переопределенного метода сохранения
Все это при условии, что желаемое поведение в точности соответствует описанию - посмотрите текущую цену жанра по умолчанию при создании экземпляра и сохраните ее независимо от будущих изменений в жанре. Если вы хотите сделать что-то более гибкое - например, скажем «фильмы ужасов стоят X сейчас, если только они не переопределены, но если я изменю цену жанра по умолчанию позже, они все обновят», то вам лучше всего использовать метод класса Movie
, который вычисляет цена основана на текущем состоянии, а не устанавливается при создании и разрыве этой связи. Но это зависит от того, что вы хотите.