【发布时间】:2015-01-29 00:56:52
【问题描述】:
如何将 Django 模型中的默认主键替换为自定义主键字段?
我有一个模型,一开始没有定义主键,因为 django 默认自动添加一个id 字段作为主字段。
#models.py
from django.db import models
class Event(models.Model):
title = models.CharField(max_length=50, unique=True)
description = models.CharField(max_length=150)
我从django shell添加了一些对象。
>>e = Event('meeting', 'Contents about meeting')
>>e.save()
>>e = Event('party', 'Contents about party')
>>e.save()
然后我需要将自定义字符字段作为主要添加到此模型中。
class Event(models.Model):
event-id = models.CharField(max_length=50, primary_key=True)
...
运行 makemigrations:
$ python manage.py makemigrations
You are trying to add a non-nullable field 'event-id' to event without a default; we can't do that (the database needs something to populate existing rows).
Please select a fix:
1) Provide a one-off default now (will be set on all existing rows)
2) Quit, and let me add a default in models.py
Select an option: 1
Please enter the default value now, as valid Python
The datetime and `django.utils.timezone modules` are available, so you can do e.g. timezone.now()
>>> 'meetings'
Migrations for 'blog':
0002_auto_20141201_0301.py:
- Remove field id from event
- Add field event-id to event
但是在运行 migrate 时却抛出了一个错误:
.virtualenvs/env/local/lib/python2.7/site-packages/django/db/backends/sqlite3/base.py", line 485, in execute
return Database.Cursor.execute(self, query, params)
django.db.utils.IntegrityError: UNIQUE constraint failed: blog_event__new.event-id
【问题讨论】:
标签: python django django-models migrate