2015-05-28 7 views
1

У меня есть странный вопрос, где же PK который генерируется дает мне ошибку:ключ Джанго нарушает ограничение уникальности

django.db.utils.IntegrityError: duplicate key value violates unique constraint "Comment_pkey" 
DETAIL: Key (id)=(uxlt72XrRu-fm260qHo9Zg) already exists. 

Это моя модель:

class Comment(models.Model): 

    id = models.CharField(primary_key=True, max_length=28, unique=True, 
          default="make_id()", editable=False) 
    description = models.TextField(max_length=255) 

Функция для генерации ID:

def make_id(): 
    return base64.b64encode(uuid.uuid4().bytes).decode("utf-8") 

Как я получаю ошибку:

c = Comment.objects.create(description="test") < ==== works

c2 = Comment.objects.create(description="test2") < === violates unique constraint

Так почему же моя модель не генерирует новый идентификатор каждый раз? То же самое происходит в тестах не только оболочки.

ответ

5

Правильное использование параметра по умолчанию: default=make_id. Таким образом, полевая линия будет:

id = models.CharField(primary_key=True, max_length=28, unique=True, 
         default=make_id, editable=False) 
+0

что относительно лямбда? будет ли это работать? lambda: make_doodah() – Prometheus

+0

Миграции могут не работать, но зачем вам нужна лямбда в первую очередь, если вы можете просто передать функцию? – knbk

+0

Вот соответствующая документация: https://docs.djangoproject.com/en/dev/ref/models/fields/#default –

Смежные вопросы