使用Django在遗留数据库中使用主键字段

时间:2015-05-30 10:54:51

标签: mysql django database legacy inspectdb

我必须为活动的MySQL数据库创建一个简单的CRUD面板。当我尝试迁移我的应用程序时,收到以下错误:

AssertionError: A model can't have more than one Autofield

我已经阅读了Django Book第18章中的以下内容:

  

每个生成的模型都有每个字段的属性,包括id   主键字段。但是,回想一下Django会自动添加一个   如果模型没有主键,则为id主键字段。从而,   你想要删除任何看起来像这样的行:

     

id = models.IntegerField(primary_key=True)不仅是这些行   多余的,但如果你的应用程序会出现问题,它们也会导致问   将新记录添加到这些表中。

我对此字段的情况相同:

id_call = models.BigIntegerField(primary_key=True)

但是,如果我按照上述建议删除此行,则使用此表的原始应用程序(不是django应用程序)可能无法正常工作,因为它可能使用此id_call字段从此表调用数据。

我该如何解决这种情况?

1 个答案:

答案 0 :(得分:1)

对我而言,在使用Wordpress数据库时,将models.AutoField(unique=True)更改为models.AutoField(primary_key=True)

我在models.py生成的python manage.py --database='olddb' inspectdb > models.py中有大约4个。在这里我再使用一个数据库,比如olddb,如果使用默认数据库,则可以删除--database='olddb'

我尝试了python manage.py runserver。所以我通过上面提到的事情修复了每一行。

参考: -

https://docs.djangoproject.com/en/1.8/topics/db/models/#automatic-primary-key-fields

https://docs.djangoproject.com/en/1.8/topics/db/multi-db/#