django迁移模型entry 提示 on delete
根据图书《python编程从入门到实践》来操作,修改完models.py后,执行命令python manage.py makemigrations learning_logs,就报错,求大神指点。
model.py 代码
from django.db import modelsclass Topic(models.Model):
"""用户学习的主题"""
text = models.CharField(max_length = 200)
date_added = models.DateTimeField(auto_now_add = True)
def __str__ (self):
"""返回模型的字符串表示"""
return self.text
class Entry(models.Model):
"""学到的有关某个主题的具体知识"""
topic = models.ForeignKey(Topic)
text = models.TextField()
date_added = models.DateTimeField(auto_now_add = True)
class Meta:
verbose_name_plural = 'entries'
def __str__(self):
"""返回模型的字符串表示"""
return self.text[:50] + "..."
manage.py 代码如下
#!/usr/bin/env pythonimport os
import sys
if __name__ == "__main__":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "learning_log.settings")
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
raise ImportError(
"Couldn't import Django. Are you sure it's installed and "
"available on your PYTHONPATH environment variable? Did you "
"forget to activate a virtual environment?"
) from exc
execute_from_command_line(sys.argv)
回答:
在迁移模型Entry时,运行代码python manage.py makemigrations learning_logs,报错
TypeError: __init__() missing 1 required positional argument: 'on_delete'
经官方文档解释:https://docs.djangoproject.com/e ... /fields/#foreignkey发现foreignkey需要增加一个参数on_delete,于是将topic = models.ForeignKey(Topic) 更改为
topic = models.ForeignKey('Topic', on_delete=models.CASCADE),成功运行。
回答:
两种可能
topic = models.ForeignKey(Topic)
少了一个参数on_delete.不确定你使用的是django哪个版本。我怎么记得之前这个参数是可选的呢。。。
https://docs.djangoproject.co...
- makemigrations的时候,和你app下面的migrations文件夹里面的文件相冲突。解决办法是删掉migrations文件夹里面除了__init__.py之外的所有文件。重新生成migrate文件。不过这个时候,你的数据库表结构一般也要清空,除非你能手动修改数据库中的表django_migrate.
回答:
因为你用的 django 版本是 2.x,这个版本对于外键已经强制需要声明 on_delete,低版本的不用,可以看一下 django 的升级日志
回答:
Django2.0之后,on_delete是必须要写的。不然的话会报错,pycharm编辑器也会提示。建议先把环境配置成和书中一样的版本。
以上是 django迁移模型entry 提示 on delete 的全部内容, 来源链接: utcz.com/a/164990.html