Форум сайта python.su
Добрый день.
Хочется создать таблицу в которой будет поле models.BooleanField(default=False) и что бы это поле могло иметь значение True ТОЛЬКО ДЛЯ ОДНОЙ ЗАПИСИ из всей таблицы.
Думается сделать в момент save выборку по фильтру True из этой таблицы и менять значение на False, а эту запись сохранять в True.
Может быть есть какое то готовое решение?
Спасибо.
Офлайн
ivnРешение на уровне СУБД или на уровне Django? Понятно, что если в Джанге и есть что-то готовое (хотя его там нет), то оно будет делать что-то такое, что вы и предлагаете. Ну это же две строчки кода, чего там искать готового?
Может быть есть какое то готовое решение?
Офлайн
Мне кажется лучше валидатор настроить.
Мб на уровне СУБД?, раз уж создал тему.
Отредактировано ivn (Сен. 28, 2018 11:09:19)
Офлайн
ivnНу, например, триггер завести
Мб на уровне СУБД?, раз уж создал тему.
Офлайн
Papa_SvinПодскажите, где посмотреть про триггеры (что такое триггеры и желательно совместно с джанго) и еще про индексы то же бы хорошо посмотреть.
Офлайн
google: SQL, TRIGGERS, CONSTRAINTS
Но вообще при работе с джангой крайне не рекомендуется такое делать. Потому что джанга предполагает (если можно это так назвать) что знает о базе всё.
Если сделать такой констрейнт, то придётся ловить какое-то подобие IntegrityError при попытке засунуть в таблицу ещё один True.
Если сделать триггер, то возможно странное поведение (триггер, например, который при инсерте ИСТИНЫ заменяет ранее истинное на ложное), если джанга до этого прочитала предыдущую истинную запись, что-то вставила, и затем что-то хочет продолжить делать с ранее-истинной-записью
Лучше, в общем, делайте джангиными средствами, это три строчки кода.
Офлайн