170 похожих чатов

Всем привет) Подскажите пожалуйста, есть модель с конкурсами, у каждого

конкурса может быть один из статусов. Как правильно сделать, чтобы в базе мог быть только один конкурс с уникальным тайтлом, для определенного статуса ? Пример: есть конкурс с названием Test, и статусом Open. Тогда другие пользователи не могут создать конкурс с таким же именем, но если этот конкурс поменяет статус в Finished, то этот тайтл станет открытым. Тоесть проверять уникальность только среди тайтлов с определенным статусом ?

Делаю через UniqueConstraint, но что-то не совсем то получается
https://dpaste.org/9eJt

15 ответов

7 просмотров

а чем не подходит unique_together('title', 'status')?

Nikita-Voroshylov Автор вопроса

В таком случае ограничением будет уникальный статус для каждого из статусов, верно ? А необходимо, чтобы была возможность сделать сколько угодно тайтлов со статусом Draft например, но только один для статуса Open. К тому же, а доке пишут, что unique_together уже устаревшее решение, и стоит использовать constraints

unique_together - это и есть constraint :))) но поставленную задачу не решает, неправильно понял, сорри

https://stackoverflow.com/questions/62170840/conditional-unique-together-in-django мне кажется, ты был на верном пути

Nikita-Voroshylov Автор вопроса

В доке это два отдельных раздела:)

сорри, не совсем понял - каких?

models.UniqueConstraint( fields=['crop', 'order'], condition=Q(sku=None), name='unique_2' ) конкретно вот этот пример похож на то, что нужно

Nikita-Voroshylov Автор вопроса

По функционалу да, это оно и тоже, согласен. Но в доке - это разные носки, у со временем, я так понимаю, unique_together будет не лучшей практикой) https://docs.djangoproject.com/en/3.2/ref/models/options/#django.db.models.Options.unique_together https://docs.djangoproject.com/en/3.2/ref/models/options/#constraints

Nikita-Voroshylov Автор вопроса

Да, это похоже на стандартный пример из доки, но он работает не совсем корректно. Сейчас попробую восстановить, и скажу, что там не так

как минимум, в перечне полей у тебя одно поле перечислено

UniqueConstraint(fields=['title'] ... ) где ж второе поле? :)

Nikita-Voroshylov Автор вопроса

Так тоже пробовал)

ну вот так скорее всего правильнее у тебя там кастом поле стоит, фильтрация точно корректно отрабатывает? как именно не работает?

То условие, что у тебя сделает уникальным title когда status open, ты тут буквально разрешаешь создавать: title='tittle' + status='open' title='tittle1' + status='open' title='tittle2' + status='open' Но повторно, например title='tittle' + status='open' — уже не вийдет

Nikita-Voroshylov Автор вопроса

Так все работает действительно, только одна ошибка остается. Когда есть тайтл со статусом Open, и другой юзер пытается свой тайтл опубликовать из статуса Draft, появляется ошибка IntegrityError, что логично. Но, когда первый пользователь свой тайтл перевел в другой статус, или удалил, не важно, то при попытке вторым пользователем уже опубликовать свой тайтл, на место первого, ошибка IntegrityError остается. Я так понимаю, потому что запиь в бд уже есть ?

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта