我正在尝试使用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/