2012-03-21 10 views
8

Ho questo modello:Django unico = True tranne che per i valori vuoti

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

serial_number può essere vuoto e nulla, perché tutte le parti non hanno necessariamente un numero di serie. Tuttavia, dopo aver memorizzato una parte senza un numero di serie, vuoto non è più univoco e viene visualizzato questo errore:

Parte con questo numero di serie già esistente.

Esiste una soluzione alternativa? Ho già visto this question, ma non ho un modello. Io uso l'amministratore o lo faccio direttamente nel codice.

+5

Se si utilizza l'amministratore, è possibile definire un modulo del modello personalizzato. Ho mostrato come nella risposta hai collegato. Se lo stai facendo in codice, imposta semplicemente 'part.serial_number = None' invece di usare" "per i valori vuoti. – Alasdair

risposta

-1

Sono abbastanza sicuro che i valori nulli non vengono presi in considerazione nei vincoli di unicità. Il modo per aggirare questo è non usare null, ma usare una stringa vuota. Quindi, rimuovere null=True.

+0

Sì, è possibile avere più di null in una colonna univoca. Tuttavia, l'OP vuole consentire più di un valore vuoto. Pertanto devono consentire null, poiché i controlli di unicità consentono solo una stringa vuota. – Alasdair

4

Mi sono imbattuto nello stesso problema e l'ho risolto specificando None per il campo durante il salvataggio.

Specificare default=None potrebbe essere utile pure.

Problemi correlati