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