Получение: неверный синтаксис ввода для uuid: при использовании django-uuidfield в качестве первичного ключа для модели

У меня есть следующий класс модели, который использует django-uuidfield в качестве первичного ключа:

class FODType(models.Model):
    id = UUIDField(auto=True, primary_key=True)
    name = models.CharField(max_length=50)

От администратора я пытаюсь создать запись для этой модели, но получаю следующую ошибку:

DataError в /admin/Bleary/fodtype/add/ недопустимый синтаксис ввода для uuid: "" LINE 1: ... WHERE "Bleary_fodtype"."id" = ''

UUIDField в модели настроено на автоматическое создание значения, если оно не указано, но в этом случае пустая строка указывается как значение для первичного ключа при сохранении. Поскольку первичный ключ имеет значение, он пытается выполнить обновление вместо вставки и терпит неудачу.

Что я здесь делаю неправильно?


person theraju    schedule 05.01.2014    source источник
comment
Какую версию django и django-uuidfield вы используете?   -  person mariodev    schedule 05.01.2014
comment
Django==1.6.1 Markdown==2.3.1 Pygments==1.6 django-filter==0.7 django-uuidfield==0.4.0 djangorestframework==2.3.10 psycopg2==2.5.1   -  person theraju    schedule 06.01.2014
comment
Я взломал решение в fields.py для uuidfield: если он был вызван с параметром значения, установленным на пустую строку, он не создавал новый uuid. Админ вызывал его с пустой строкой. Поэтому я обновил get_db_prep_value для учета этого случая.   -  person theraju    schedule 06.01.2014
comment
Странно, что вы получаете эту ошибку, у меня такая же настройка, и она работает правильно. Есть ли у вас индивидуальные классы администратора?   -  person mariodev    schedule 06.01.2014
comment
Не уверен, что это может вам помочь: stackoverflow. ком/вопросы/7451465/   -  person Vlad    schedule 05.08.2014


Ответы (1)


Обратите внимание, что реализация django-UUDField не отражает ожидаемое поведение при использовании в качестве первичного ключа, если по какой-либо причине save() не удается, значение поля сохраняется, поэтому проверку obj.pk больше нельзя использовать для проверки объекта. сохраняется или нет.

person sax    schedule 07.12.2014