强制Django考虑在makemigrations中加入表

时间:2018-04-19 23:28:43

标签: django postgresql django-models database-migration

我需要将我的User模型上的外键从UUIDField更改为IntegerField。我分两步完成了这个步骤:

  1. 将当前主键从id重命名为old_id并运行迁移。这生成了RenameField操作。
  2. 完全从用户删除old_id字段,以便自动id字段接管。这会在RemoveField上生成old_id操作,为名为AddField的{​​{1}}生成models.AutoField操作。完善。数据库显示id现在有一个User字段,自动递增。
  3. 然后我去运行应用程序并快速遇到问题:用户int id自动生成的数据库连接表(例如models.ManyToManyField未更新 - 他们仍然有作为UUID数据类型的user_languageslanguage_id。数据库中没有外键约束,但该字段上有索引。

    如何强制Django使用user_id列的新数据类型重新生成这些连接表?

    注意:User.id没有收到任何待处理的更改。另外,我可以丢失数据库中的数据。

1 个答案:

答案 0 :(得分:0)

从模型中删除/注释掉字段:

<SCRIPT>
function passWord() {
  var testV = 1;
  var pass1 = prompt('Enter Store Code Here',' ');
  while (testV < 3) {
    if (!pass1) 
      history.go(-1);
    if (pass1.toLowerCase() == "CUSTOMPASSWORD1234") {
      alert('You are being redirected!');
      window.open('CUSTOMPASSWORD1234.html');
      break;
    } 
    testV+=1;
    var pass1 = 
    prompt('Access Denied - Store Code Not Recognised, Please Try Again.','Password');
  }
  if (pass1.toLowerCase()!="password" & testV ==3) 
  history.go(-1);
  return " ";
} 
</SCRIPT>
<CENTER>
<FORM>
<input type="button" value="Enter Store Code" onClick="passWord()">
</FORM>
</CENTER>

然后生成迁移。然后取消注释行。然后再运行一次迁移。

警告:这会导致这些表被删除并重新创建,因此所有这些关系都将丢失。