mzu*_*mzu 12 django django-south
我正在尝试使用现有数据转发模型.该模型有一个新的字段,其约束唯一= True和null = False.当我做
./manage.py schemamigration myapp --auto
Run Code Online (Sandbox Code Playgroud)
South让我通过询问为新字段指定默认值:
Specify a one-off value to use for existing columns now
Run Code Online (Sandbox Code Playgroud)
通常我将其设置为None,但由于此字段必须是唯一的,我想知道是否可以通过以下方式传递South的唯一值:
>>> import uuid; uuid.uuid1().hex[0:35]
Run Code Online (Sandbox Code Playgroud)
这给了我一个错误信息
! Invalid input: invalid syntax
Run Code Online (Sandbox Code Playgroud)
在通过命令行迁移时是否可以传递South随机唯一默认值?
谢谢.
Der*_*wok 28
不幸的是,只有datetime
模块可用作模式迁移中的一次性值.
但是,您可以通过将其拆分为三次迁移来实现相同的效果:
数据迁移教程:http://south.readthedocs.org/en/0.7.6/tutorial/part3.html#data-migrations
在Django 1.7+中,您可以执行以下操作。它首先添加没有索引且没有唯一性的字段。然后,它分配唯一值(我基于它们的名称和您需要创建的使用的Slugify方法),最后再次更改该字段以添加索引和唯一属性。
from django.db import migrations
import re
import django.contrib.postgres.fields
from common.utils import slugify
import django.core.validators
def set_slugs(apps, schema_editor):
categories = apps.get_model("myapp", "Category").objects.all()
for category in categories:
category.slug = slugify(category.name)
category.save()
class Migration(migrations.Migration):
dependencies = [
('myapp', '0034_auto_20150906_1936'),
]
operations = [
migrations.AddField(
model_name='category',
name='slug',
field=models.CharField(max_length=30, validators=[django.core.validators.MinLengthValidator(2), django.core.validators.RegexValidator(re.compile('^[0-9a-z-]+$'), 'Enter a valid slug.', 'invalid')], help_text='Required. 2 to 30 characters and can only contain a-z, 0-9, and the dash (-)', unique=False, db_index=False, null=True),
preserve_default=False,
),
migrations.RunPython(set_slugs),
migrations.AlterField(
model_name='category',
name='slug',
field=models.CharField(help_text='Required. 2 to 30 characters and can only contain a-z, 0-9, and the dash (-)', unique=True, max_length=30, db_index=True, validators=[django.core.validators.MinLengthValidator(2), django.core.validators.RegexValidator(re.compile('^[0-9a-z-]+$'), 'Enter a valid slug.', 'invalid')]),
),
]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5162 次 |
最近记录: |