Django执行migrate命令报错 按教程编写models.py代码仍无法运行
问题原因
你使用的Django为2.0及以上版本,而参考教程使用的是Django 1.x版本,二者存在语法不兼容:Django 2.0开始ForeignKey外键字段必须显式指定on_delete参数,你当前的models代码缺失该参数,是报错的核心原因,你贴出的报错是截断内容,完整报错末尾会明确提示该参数缺失。
解决方案
1. 修改models.py的外键字段
找到Webpage和AccessRecord类里的外键定义,补充on_delete参数:
from django.db import models class Topic(models.Model): top_name = models.CharField(max_length=264,unique=True) def __str__(self): return self.top_name class Webpage(models.Model): # 补充on_delete参数 topic = models.ForeignKey(Topic, on_delete=models.CASCADE) name = models.CharField(max_length=264,unique=True) url = models.URLField(unique=True) def __str__(self): return self.name class AccessRecord(models.Model): # 补充on_delete参数 name = models.ForeignKey(Webpage, on_delete=models.CASCADE) date = models.DateField() def __str__(self): return str(self.date)
on_delete=models.CASCADE是入门场景最常用的级联规则,含义是当关联的主表数据被删除时,对应从表数据也会同步删除。
2. 重新执行迁移命令
先执行生成迁移文件的命令:python manage.py makemigrations
命令无报错后,再执行迁移生效命令:python manage.py migrate
补充说明
你的admin.py不需要修改,教程的操作仅适配老版本Django,本次报错和admin配置无关。
内容的提问来源于stack exchange,提问作者Abdul Khan
相关产品推荐
相关产品推荐

