Django 如何使用其他字段的初始数据在模型中创建新字段?

Django 如何使用其他字段的初始数据在模型中创建新字段?,django,migration,django-south,Django,Migration,Django South,在我的Django应用程序中,我有如下模型: class Foo(models.Model): ... user = models.OneToOneField(User) ... 这里的user来自django.contrib.auth.models。我正在使用South进行迁移,我想用一个新的布尔字段扩展Foo,初始数据等于Foo的用户字段中的is\u active字段。使用 首先执行架构迁移:将is_active字段添加到Foo类 # edit your appnames/mo

在我的Django应用程序中,我有如下模型:

class Foo(models.Model):
  ...
  user = models.OneToOneField(User)
  ...
这里的
user
来自
django.contrib.auth.models
。我正在使用South进行迁移,我想用一个新的布尔字段扩展
Foo
,初始数据等于
Foo
的用户字段中的
is\u active
字段。

使用
  • 首先执行架构迁移:将
    is_active
    字段添加到
    Foo

    # edit your appnames/models.py
    python manage.py schemamigration appname --auto 
    python manage.py migrate appname
    
  • 执行数据迁移:

    $ python manage.py datamigration appname copy_is_active
    
  • 编辑
    appname/migrations/0???\u copy\u处于活动状态。py
    ,尤其是
    转发
    方法,以执行所需操作

    比如说,

    ....
    from appname.models import Foo
    
    class Migration(DataMigration):
        def forwards(self, orm):
            for obj in Foo.objects.all():
                obj.is_active = obj.user.is_active
                obj.save()
            #for yn in (True, False):
            #    Foo.objects.filter(user__is_active=yn).update(is_active=yn)
    ...
    
  • 执行迁移

    $ python manage.py migrate appname
    

  • 尝试了
    new\u bool=models.BooleanField(默认值=self.user.is\u active)
    ?但这也会影响将来创建的所有实例,对吗?我想避免这种情况。不知何故,我错过了文档中的数据迁移部分:)非常感谢!