我正在尝试使用Django创建将MySQL数据库作为参考的模型,但是当我尝试迁移时,它引发了以下错误:

Cannot change column 'id': used in a foreign key constraint 'fk_post' of table 'demoniosmv.images'"


我的模型如下所示:

from django.db import models
from django.contrib.auth.models import User
from django.utils import timezone

class Images(models.Model):
    #id = models.IntegerField(primary_key=True)
    fk_post = models.ForeignKey('Post', related_name="images", blank=True, null=True, on_delete = models.CASCADE)
    img_url = models.CharField(max_length=100, blank=True, null=True)

    class Meta:
        managed = True


class Post(models.Model):
    #id = models.IntegerField(primary_key=True)
    author = models.ForeignKey(User, related_name="posts", on_delete = models.CASCADE)
    title = models.CharField(max_length=200, blank=True, null=True)
    text = models.TextField(blank=True, null=True)
    created_date = models.DateTimeField(default = timezone.now)

    class Meta:
        managed = True


从中创建数据库的SQL脚本是这样的:

-- MySQL Script generated by MySQL Workbench
-- Sun Jul 21 14:14:44 2019
-- Model: New Model    Version: 1.0
-- MySQL Workbench Forward Engineering

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

-- -----------------------------------------------------
-- Schema demoniosmv
-- -----------------------------------------------------

-- -----------------------------------------------------
-- Schema demoniosmv
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `demoniosmv` DEFAULT CHARACTER SET utf8 ;
USE `demoniosmv` ;

-- -----------------------------------------------------
-- Table `demoniosmv`.`post`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `demoniosmv`.`post` (
  `id` INT NOT NULL,
  `title` VARCHAR(200) NULL,
  `text` TEXT(1000) NULL,
  `created_date` DATETIME NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `demoniosmv`.`images`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `demoniosmv`.`images` (
  `id` INT NOT NULL,
  `fk_post` INT NULL,
  `img_url` VARCHAR(100) NULL,
  PRIMARY KEY (`id`),
  INDEX `fk_post_idx` (`fk_post` ASC) VISIBLE,
  CONSTRAINT `fk_post`
    FOREIGN KEY (`fk_post`)
    REFERENCES `demoniosmv`.`post` (`id`)
    ON DELETE CASCADE
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;


为了创建模型,我使用了insepctdb命令,我将sqlclient用于MySQL连接,并且将Django 2.2.3与Python 3.7一起使用。

最佳答案

我必须删除migrations和py_cache文件夹中的文件才能使其正常工作。除init.py文件外的所有文件

关于python - 无法更改列“id”:在Django上表错误的外键约束中使用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57137097/

10-12 12:29
查看更多