在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python/ django遷移模型entry 提示 on delete

django遷移模型entry 提示 on delete

根據(jù)圖書《python編程從入門到實(shí)踐》來操作,修改完models.py后,執(zhí)行命令python manage.py makemigrations learning_logs,就報(bào)錯(cuò),求大神指點(diǎn)。
圖片描述

model.py 代碼

from django.db import models
class Topic(models.Model):
    """用戶學(xué)習(xí)的主題"""
    text = models.CharField(max_length = 200)
    date_added = models.DateTimeField(auto_now_add = True)

    def __str__ (self):
        """返回模型的字符串表示"""
        return self.text
    
class Entry(models.Model):
    """學(xué)到的有關(guān)某個(gè)主題的具體知識(shí)"""
    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 python
import 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)
回答
編輯回答
陪我終

Django2.0之后,on_delete是必須要寫的。不然的話會(huì)報(bào)錯(cuò),pycharm編輯器也會(huì)提示。建議先把環(huán)境配置成和書中一樣的版本。

2017年4月4日 12:48
編輯回答
疚幼

兩種可能

  • topic = models.ForeignKey(Topic)少了一個(gè)參數(shù)on_delete.不確定你使用的是django哪個(gè)版本。我怎么記得之前這個(gè)參數(shù)是可選的呢。。。

https://docs.djangoproject.co...

  • makemigrations的時(shí)候,和你app下面的migrations文件夾里面的文件相沖突。解決辦法是刪掉migrations文件夾里面除了__init__.py之外的所有文件。重新生成migrate文件。不過這個(gè)時(shí)候,你的數(shù)據(jù)庫表結(jié)構(gòu)一般也要清空,除非你能手動(dòng)修改數(shù)據(jù)庫中的表django_migrate.
2017年1月29日 17:55
編輯回答
雅痞

因?yàn)槟阌玫?django 版本是 2.x,這個(gè)版本對(duì)于外鍵已經(jīng)強(qiáng)制需要聲明 on_delete,低版本的不用,可以看一下 django 的升級(jí)日志

2017年2月25日 20:59
編輯回答
舊螢火

在遷移模型Entry時(shí),運(yùn)行代碼python manage.py makemigrations learning_logs,報(bào)錯(cuò)

TypeError: __init__() missing 1 required positional argument: 'on_delete'

    經(jīng)官方文檔解釋:https://docs.djangoproject.com/e ... /fields/#foreignkey發(fā)現(xiàn)foreignkey需要增加一個(gè)參數(shù)on_delete,于是將topic = models.ForeignKey(Topic)  更改為

topic = models.ForeignKey('Topic', on_delete=models.CASCADE),成功運(yùn)行。

2017年5月18日 12:24