django.db.migrations.重命名模型和自动字段序列名

n8ghc7c1  于 2023-02-10  发布在  Go
关注(0)|答案(1)|浏览(125)

我使用Django 1.8.7和PostgreSQL,并具有以下模型:

class Permission(models.Model):

    name = models.CharField(max_length=255)
    template = models.ForeignKey(Template, related_name='permissions')

然后我添加了RenameModel操作:

migrations.RenameModel(
        old_name='Permission',
        new_name='TemplatePermission',
    ),

看起来一切正常,但是TemplatePermission.id字段的序列名仍然是myapp_permission_id_seq

postgres=# \d+ myapp_templatepermission
                                            Table "public.myapp_templatepermission"
   Column    |          Type          |                          Modifiers                           | Storage  | Description 
-------------+------------------------+--------------------------------------------------------------+----------+-------------
 id          | integer                | not null default nextval('myapp_permission_id_seq'::regclass) | plain    | 

...

有没有正确的方法来重命名序列?这是Django中的bug吗(我发现Django 1.8.x和Oracle有非常相似的bug报告和补丁)?

nukf8bse

nukf8bse1#

在我的例子中,我手动创建了sql迁移脚本。然而,如果你决定使用不同的数据库,这可能不起作用。

operations = [
  migrations.RenameModel(
    old_name='Permission',
    new_name='TemplatePermission',
  ),
  migrations.RunSQL('alter sequence myapp_permission_id_seq rename to myapp_templatepermission_id_seq;'),
]

相关问题