Что на самом деле делает djangos unique = true? - PullRequest
1 голос
/ 22 сентября 2019

Я предполагаю, что это подтверждает, что поле является уникальным для всех других записей в той же таблице.Но что происходит, если на самом деле происходит столкновение?Джанго просто падает?Или он просто продолжает перезапускать генератор по умолчанию, пока не найдет уникальное значение?Могу ли я просто использовать любой дерьмовый генератор случайных чисел / строк, который мне нужен, и предположить, что django всегда будет задавать уникальное значение?В каком случае, если все значения взяты, он просто попадает в бесконечный цикл?

1 Ответ

2 голосов
/ 22 сентября 2019

Я предполагаю, что он проверяет, является ли поле уникальным для всех других записей в той же таблице.

Это делает это конкретное поле уникальным, что означает, что не может существовать две сущностис тем же значением (в то же время).Важно отметить, что ограничение уникальности не выполняется для NULL значений: действительно, две или более записей могут одновременно существовать, когда уникальный столбец имеет NULL для всех этих записей.

Уникальность обычно обеспечивается на уровне базы данных (учитывая, что база данных может обеспечить это).В случае, если вы создаете запись со значением, которое уже принято, создание вызовет IntegrityError.Действительно, он вызовет что-то вроде:

>>> Model.objects.create(name='foo')
<Model: Model object (1)>
>>> Model.objects.create(name='foo')
&vellip;
django.db.utils.IntegrityError: (1062, "Duplicate entry 'foo' for key 'model_name_72507083_uniq'")

Таким образом, не перезапустит конструктор по умолчанию.Вы несете ответственность за то, чтобы генератор каждый раз создавал правильное значение.Таким образом, он не застрянет в бесконечном цикле, а вызовет ошибку, если уже существует функция по умолчанию, заполненная функцией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...