首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django模型AutoField误差

django模型AutoField误差
EN

Stack Overflow用户
提问于 2015-11-02 04:00:07
回答 4查看 4.4K关注 0票数 3

我有个这样的模特

代码语言:javascript
复制
class Alrule(models.Model):
    priority = models.PositiveIntegerField(unique=True)
    rule = models.CharField(max_length=256)

我移植了这个模型。在我决定使用AutoField将优先级字段作为主键之后

然后我的模型是这样的:

代码语言:javascript
复制
class Alrule(models.Model):
    priority = models.AutoField(primary_key=True)
    rule = models.CharField(max_length=256)

我进行了迁移并迁移了这个更改。

现在我又要回来了。现在,我做了以下修改:

代码语言:javascript
复制
class Alrule(models.Model):
    priority = models.PositiveIntegerField(unique=True)
    rule = models.CharField(max_length=256)

我迁徙了一次。现在,当我迁移时,我会得到以下错误:

代码语言:javascript
复制
AssertionError: A model can't have more than one AutoField.

我的理解是优先级字段之前被设置为AutoField,并且它没有被删除。请帮帮忙

我的第一次迁移是这样的:

代码语言:javascript
复制
operations = [
    migrations.RemoveField(
        model_name='alrule',
        name='id',
    ),
    migrations.AlterField(
        model_name='alrule',
        name='priority',
        field=models.AutoField(serialize=False, primary_key=True),
    ),
]

第二种迁移方式如下:

代码语言:javascript
复制
operations = [
    migrations.AddField(
        model_name='alrule',
        name='id',
        field=models.AutoField(auto_created=True, primary_key=True, default=2, serialize=False, verbose_name='ID'),
        preserve_default=False,
    ),
    migrations.AlterField(
        model_name='alrule',
        name='priority',
        field=models.PositiveIntegerField(unique=True),
    ),
]
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-11-06 11:10:24

代码语言:javascript
复制
operations = [
    migrations.AddField(
        model_name='alrule',
        name='id',
        field=models.AutoField(auto_created=True, primary_key=True, default=2, serialize=False, verbose_name='ID'),
        preserve_default=False,
    ),
    migrations.AlterField(
        model_name='alrule',
        name='priority',
        field=models.PositiveIntegerField(unique=True),
    ),
]

您的表已经有了AutoField,使用第一个操作,您将添加另一个操作。

为了避免这种情况,只需在迁移中交换操作,如下所示:

代码语言:javascript
复制
operations = [
    migrations.AlterField(
        model_name='alrule',
        name='priority',
        field=models.PositiveIntegerField(unique=True),
    ),
    migrations.AddField(
        model_name='alrule',
        name='id',
        field=models.AutoField(auto_created=True, primary_key=True, default=2, serialize=False, verbose_name='ID'),
        preserve_default=False,
    ),
]

例如,第一个ALTER字段(从表中删除AutoField ),然后再添加id AutoField返回。

票数 0
EN

Stack Overflow用户

发布于 2021-05-17 14:18:01

如果使用mssql,则存在一些限制:

目前不支持下列特性:

不支持基于SQL的regex命令。

在迁移中更改模型字段或将其转换到AutoField

https://github.com/microsoft/mssql-django#limitations

票数 1
EN

Stack Overflow用户

发布于 2015-11-02 07:50:10

这是因为AutoField并没有像您正确指出的那样被删除。删除这两个迁移文件并再次运行makemigrations。如果它不能工作,您可能还必须在此之前删除迁移文件,然后再次运行迁移。

最后,除了init.py文件之外,您还可以删除迁移文件。但是,我确信,一旦您删除这两个迁移并从那里进行新的迁移,它就会工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33470560

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档