Ошибка миграции на юг: имя «UUID» не определено

У меня есть модель с полем CharField со значением по умолчанию uuid4:

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

и это вызывает следующую ошибку:

Не удается успешно создать поле «f» для модели «m»: имя «UUID» не определено.

запускаем команду миграции! Как я могу решить эту проблему? до сих пор я пробовал:

  • определить «функцию-оболочку» в модуле для uuid (т.е.: def getUUID())
  • установить значение по умолчанию "f" путем переопределения конструктора модели

... но проблема осталась :(

пс. Я знаю, что могу проинструктировать юг для настраиваемых полей, но, по моему мнению, я не использую настраиваемые поля: P


person daveoncode    schedule 23.02.2013    source источник
comment
Во-первых, эта ошибка не соответствует опубликованному вами коду, поскольку uuid4 не совпадает с UUID. Во-вторых, вы определили или импортировали эти имена в свой модуль?   -  person Daniel Roseman    schedule 23.02.2013
comment
uuid4 исходит из модуля uuid! (каким-то образом юг печатается заглавными буквами)... и да, я импортировал все необходимые зависимости для своей модели (в django он отлично работает)   -  person daveoncode    schedule 23.02.2013
comment
Найдите эту переменную с именем UUID и ее значение. Невозможно отладить UUID из приведенного выше кода. Если есть какая-либо трассировка, опубликуйте ее.   -  person Bibhas Debnath    schedule 23.02.2013
comment
Столкнулся с той же проблемой, и мне потребовалось некоторое время, чтобы понять, что uuid.uuid4() возвращает не строку, а объект типа uuid.UUID.   -  person anttikoo    schedule 24.01.2014


Ответы (3)


Я решил определить следующую вспомогательную функцию в модуле моей модели:

from uuid import uuid4

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

тогда:

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

юг создаст файл миграции (migrations.0001_initial) со сгенерированным UUID, например:

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

это довольно недовольно... поскольку эта строка является "статической", вместо этого она должна создаваться динамически с использованием вспомогательной функции... в любом случае в мире django все работает, как и ожидалось... Я добавил несколько записей в базу данных и новый UUID был сгенерирован для каждого из них. Затем я попробовал свою первую миграцию схемы, добавив пару полей в свою модель, и они были добавлены в таблицу базы данных, как и ожидалось.

person daveoncode    schedule 23.02.2013

Вы также можете импортировать UUID в свою миграцию:

from uuid import UUID
person Mindscope    schedule 19.01.2014
comment
Как недостаток, вы должны делать это при каждой миграции - person Andrei; 22.09.2014

Я просто удалил каталог uuid из каталога node_modules.

А потом я переустановил uuid и все заработало.

Надеюсь, это помогло вам, ребята ‹3

person JoyfulJoyce    schedule 18.07.2019