2012-03-21 10 views
8

mam ten model:Django unikalny = True wyjątkiem pustych wartości

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

numer_seryjny może być puste i zerowa, ponieważ wszystkie części nie muszą mieć numer seryjny. Jednak po zapisaniu jednej części bez numeru seryjnego puste pole nie jest już unikalne i pojawia się ten błąd:

Część o tym numerze seryjnym już istnieje.

Czy istnieje obejście tego problemu? Już patrzyłem na this question, ale nie mam modelu. Używam administratora lub robię to bezpośrednio w kodzie.

+5

Jeśli używasz administratora, możesz zdefiniować niestandardowy formularz modelu. Pokazałem, jak znalazłeś odpowiedź, z którą się łączyłeś. Jeśli robisz to w kodzie, po prostu ustaw 'part.serial_number = None' zamiast" "dla pustych wartości. – Alasdair

Odpowiedz

-1

Jestem prawie pewny, że mając wartości null nie są brane pod uwagę w ograniczeniach unikalności. Aby obejść ten problem, nie używaj wartości NULL, lecz używaj pustego ciągu. Usuń więc null=True.

+0

Tak, możesz mieć więcej niż zero w unikalnej kolumnie. Jednak OP chce zezwolić na więcej niż jedną pustą wartość. Dlatego muszą zezwolić na wartość null, ponieważ kontrole unikalności dopuszczają tylko jeden pusty ciąg. – Alasdair

4

Natrafiłem na ten sam problem i naprawiłem go, podając None dla pola podczas zapisywania.

Podanie default=None również może być pomocne.

Powiązane problemy