RabbitRun9
@RabbitRun9

Как переопределить метод save у модели только для новых записей?

Всем привет! Столкнулся с очень интересной ситуацией, никак не могу придумать адекватное рабочее решение. Нужна помощь сообщества!

Ситуация такая: есть модель Post и у модели есть поле Order (помимо других полей name и тд), оно для произвольной сортировки, так вот, я переопределил у этой модели Post метод Save для того, чтоб при создании каждой новой записи — присваивался +1 к последнему уже имеющемуся индексу. Аналог id, но эти индексы я буду менять местами и сортировать записи как мне нужно.

Но столкнулся с проблемой, теперь когда я во views написал функцию которая меняет индексы местами, она при вызове save чтоб сохранить результат — задваивает индексы, из-за того что в модели переопределём уже метод save с +1 к индексу.

Не могу справиться с проблемой. Есть мысль в логике переопределения метода Save у модели сделать какую-то типа проверку: если запись новая без индекса в поле Order (пусто) — то только тогда присваиваем +1 от последнего уже имеющегося у других записей, если же индекс уже имеется — то не пересохранять его снова, а наверное тогда просто pass, как-то так например, ну типа ничего не делать больше! И как это повлияет на логику save во views? Ведь я там пытаюсь изменять и сохранять уже имеющиеся индексы.

Вот такая вот задачка.
Может кто сталкивался с подобным, какие есть решения, какие идеи?
  • Вопрос задан
  • 59 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий
Во-первых, переопределять save - это плохая практика, лучше использовать сигналы. Во-вторых, ваше решение в принципе не может быть стабильным и будет иметь ужасную производительность, экспоненциально снижающуюся с ростом количества заказов. Наконец, если уж хочется сделать плохо, то можно проверять значение поля pk. У новых записей оно будет равно None.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы