2012-03-21 2 views
8

кроме меня есть эта модель:Джанго уникального = True для пустых значений

class Part(models.Model): 
    serial_number = models.CharField(max_length=15, null=True, blank=True, validators=[validate_serial], unique=True) 
    .... 

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

Часть с этим серийным номером уже существует.

Есть ли обходной путь для этого? Я уже смотрел this question, но у меня нет модели. Я либо использую администратора, либо делаю это непосредственно в коде.

+5

Если вы используете администратор, вы можете определить пользовательскую форму модели. Я показал, как в ответ вы связались. Если вы делаете это в коде, просто установите 'part.serial_number = None' вместо использования" "для пустых значений. – Alasdair

ответ

-1

Я уверен, что с единственными ограничениями не учитываются нулевые значения. Способ обойти это - не использовать нуль, а вместо этого использовать пустую строку. Итак, удалите null=True.

+0

Да, вы можете иметь больше нуля в уникальном столбце. Тем не менее, OP хочет разрешить более одного пустого значения. Поэтому они должны разрешать null, потому что проверки уникальности допускают только одну пустую строку. – Alasdair

4

Я столкнулся с той же проблемой и исправил ее, указав None для поля при сохранении.

Задание default=None также может быть полезным.

Смежные вопросы