簡體   English   中英

Django on_delete=models.CASCADE 在 SQL 級別沒有影響

[英]Django on_delete=models.CASCADE has no effect at SQL level

我的models.py文件包含:

class User(models.Model):
    email = models.CharField(max_length=100, unique=True)
    password = models.CharField(max_length=100)
    create_time = models.DateTimeField(auto_now_add=True)

class Session(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    token = models.CharField(max_length=100, unique=True)

當我命令python manage.py makemigrations然后命令python manage.py sqlmigrate <app_name> <migration_name>我沒有看到任何顯示“ON DELETE=CASCADE”

但是,當我輸入python manage.py migrate時,遷移工作沒有失敗。

現在,如果我轉到 mysql 表(使用 SequelPro)並嘗試為當前具有會話條目的用戶刪除一行,我會收到以下錯誤:“一行未被刪除。重新加載表以確保內容在此期間未更改。請檢查控制台以查找此表的主鍵內可能存在的錯誤! ”。

現在,當我轉到會話表並刪除該用戶的會話,然后嘗試從用戶表中刪除該用戶的行時,它會正確刪除。 這表明ON DELETE = CASCADE實際上不在 MySQL 級別工作。

我該如何糾正?

文檔(強調我的):

ForeignKey.on_delete

當 ForeignKey 引用的對象被刪除時,Django 將模擬由 on_delete 參數指定的 SQL 約束的行為。

Django 實際上並沒有在數據庫中設置ON DELETE子句。 如果需要,可以使用RunSQL操作手動添加一個。 請務必使用相同的索引名稱,或保留原始索引,否則您稍后可能會遇到錯誤。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM