2013-02-23 10 views
8

Ho un modello con un campo CharField con un valore predefinito di uuid4:errore migrano a sud: il nome 'UUID' non è definito

f = models.CharField(default=uuid4, max_length=36, unique=True, blank=True) 

e questo sta causando il seguente errore:

Cannot successfully create field 'f' for model 'm': name 'UUID' is not defined.

esegue il comando migrate! Posso risolvere questo problema? finora ho provato:

  • per definire una "funzione involucro" nel modulo per uuid (es: def getUUID())
  • per impostare il valore predefinito di "f" sovrascrivendo costruttore Modello

... ma il problema rimane :(

ps so che posso insegnare a sud per i campi personalizzati, ma non sto usando campi personalizzati a mio parere:. P

+0

In primo luogo, tale errore non corrisponde al codice che hai postato, come 'uuid4' non è la stessa come' UUID'. In secondo luogo, hai definito o importato quei nomi nel tuo modulo? –

+0

uuid4 viene dal modulo uuid! (in qualche modo è stampato in maiuscolo da sud) ... e sì, ho importato tutte le dipendenze necessarie per il mio modello (funziona bene in django) – daveoncode

+0

Trova la variabile chiamata UUID e il suo valore. Non c'è modo di eseguire il debug di UUID dal codice precedente. Se c'è qualche traceback, postalo. –

risposta

10

ho risolto definendo il seguente funzione di supporto nel modulo di mio modello:

from uuid import uuid4 

def generateUUID(): 
    return str(uuid4()) 

poi:

f = models.CharField(default=generateUUID, max_length=36, unique=True, editable=False) 

sud genererà un file di migrazione (migrations.0001_initial) con un UUID generato come:

default='5c88ff72-def3-4842-8d48-a75bb3240bb5' 

questo è piuttosto infelice ... dal momento che quella stringa è "statica", invece deve essere creata dinamicamente usando la funzione helper ... comunque nel mondo del django sembra funzionare come previsto ... Ho aggiunto alcuni cavi nel database e un nuovo UUID è stato generato per ciascuno. Ho quindi provato la mia prima migrazione dello schema aggiungendo un paio di campi al mio modello e sono stati aggiunti alla tabella del database come previsto.

4

È anche possibile importare UUID nella migrazione:

from uuid import UUID 
+0

Molto meglio, grazie – Andrei

+0

Come svantaggio, devi farlo in ogni migrazione – Andrei