Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 模式迁移和默认值_Python_Django_Django South - Fatal编程技术网

Python 模式迁移和默认值

Python 模式迁移和默认值,python,django,django-south,Python,Django,Django South,我正在使用South来管理我的数据库。似乎每次我在创建模型的方式上改变一些小的东西,我最终都要为迁移做一系列的练习。例如,假设我有一个这样的类: class Entry(models.Model): title = models.CharField(max_length=80) author = models.ForeignKey(User) pubDate = models.DateTimeField() tags = models.ManyToManyFie

我正在使用South来管理我的数据库。似乎每次我在创建模型的方式上改变一些小的东西,我最终都要为迁移做一系列的练习。例如,假设我有一个这样的类:

class Entry(models.Model):

    title = models.CharField(max_length=80)
    author = models.ForeignKey(User)
    pubDate = models.DateTimeField()
    tags = models.ManyToManyField(Tag)
    text = models.TextField()
另一个类将
条目
作为外键:

class Comment(models.Model):
    author = models.ForeignKey(User)
    entry = models.ForeignKey(Entry)
    pubDate = models.DateTimeField()
    text = models.TextField()
这很简单,但是如果我要做一些简单的事情,比如在
条目
中将名称pubDate更改为pub_date,为了正确地执行仅针对此名称更改的模式迁移,我必须设置:

default=None, null=True
对于
Entry
中的pubDate和
Comment
中的
Entry
字段,否则在尝试运行迁移时会出现以下异常:

The field 'Comment.entry' does not have a default specified, yet is NOT NULL.

然后我必须返回并取出默认/空值。是否有一种不那么繁琐的方法来实现这一点,或者在将模型提交到迁移之前,我是否需要真正地思考一下这些模型?在开始阶段,如果您没有任何需要保存的数据,那么仅仅设置和删除数据库是否更有意义?如果是,最简单的方法是什么

您需要创建一个迁移类,使用:

python manage.py datamigration yourapp change_name_to_pub_date
并重写向前和向后的方法:

# -*- coding: utf-8 -*-
import datetime
from south.db import db
from south.v2 import SchemaMigration
from django.db import models


class Migration(SchemaMigration):
    def forwards(self, orm):
        db.rename_column('yourapp_entry', 'pubDate', 'pub_date')
        db.rename_column('yourapp_comment', 'pubDate', 'pub_date')

    def backwards(self, orm):
        db.rename_column('yourapp_entry', 'pub_date', 'pubDate')
        db.rename_column('yourapp_comment', 'pub_date', 'pubDate')
现在,运行:

python manage.py migrate yourapp