2013-02-23 7 views
8

Mam modelu z polem Charfield z domyślnej wartości uuid4:błąd migrują na południe: nazwa 'UUID' nie jest zdefiniowane

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

a to powoduje następujący błąd:

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

z uruchomieniem komendy migracyjnej! Czy mogę naprawić ten problem? Dotychczas próbowałem:

  • zdefiniować funkcję „wrapper” w module dla UUID (tj: def getUUID())
  • ustawić domyślną wartość „f” nadrzędnymi konstruktor modelu

... ale pozostaje problem :(

ps wiem, że mogę polecić południe dla pól niestandardowych, ale nie używam pól niestandardowych moim zdaniem: p.

+0

Po pierwsze, że błąd nie odpowiadają kodowi pan pisał, jak 'uuid4' nie jest taka sama jak' UUID'. Po drugie, czy zdefiniowałeś lub zaimportowałeś te nazwy w swoim module? –

+0

uuid4 pochodzi z modułu uuid! (w jakiś sposób jest drukowany jakoś z góry na południe) ... i tak, zaimportowałem wszystkie potrzebne zależności dla mojego modelu (działa dobrze w django). – daveoncode

+0

Dowiedz się, która zmienna nazywa się "UUID" i jaka jest jej wartość. Nie ma możliwości debugowania UUID z powyższego kodu. Jeśli jest jakiś ślad, opublikuj to. –

Odpowiedz

10

Rozwiązałem definiowaniaPoniższa funkcja pomocnika w module mojego modelu:

from uuid import uuid4 

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

następnie:

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

południe wygeneruje plik migracji (migrations.0001_initial) z wygenerowanym UUID jak:

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

to całkiem niezadowolony ... ponieważ ten ciąg jest "statyczny", zamiast tego musi być tworzony dynamicznie za pomocą funkcji pomocnika ... tak czy inaczej w świecie django wygląda na działającego zgodnie z oczekiwaniami ... Dodałem trochę kable do bazy danych i dla każdego wygenerowano nowy identyfikator UUID. Następnie spróbowałem mojej pierwszej migracji schematu, dodając kilka pól do mojego modelu i zostały one dodane do tabeli bazy danych zgodnie z oczekiwaniami.

4

Można także importować UUID w migracji:

from uuid import UUID 
+0

Znacznie lepiej, dzięki – Andrei

+0

Wadą jest to, że musisz to zrobić w każdej migracji – Andrei

Powiązane problemy