日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Django 遷移錯誤 Cannot add foreign key constraint,字段類型自動變成Bigint

作者:名難取a 更新時間: 2022-09-25 編程語言

問題描述

今天在數據遷移的時候,一直報錯 Cannot add foreign key constraint

django.db.utils.OperationalError: (3780, "Referencing column 'category_id' and referenced column 'id' in foreign key constraint 'tb_goods_visit_category_id_b3e36237_fk_tb_goods_category_id' are incompatible.")

原因分析:

產生這個錯誤的多數原因有以下幾點:

  1. 兩張表里要設主鍵和外鍵的字段的數據類型或者數據長度不一樣 (例如這個是int
    另外一個是tinyint,或者都是int,但是設置的長度不同)

  2. 某個表里已經有記錄了

  3. 兩個表的引擎不一樣,innodb還是mysim

  4. 要設置外鍵的字段不能為主鍵

  5. 改建所參考的字段必須為主鍵

  6. 兩個字段必須具有相同的數據類型和約束,就是外鍵和當前字段類型必須要一樣,同是int或者是bigint

然后我一一對比了以上原因,是因為當前一張表的字段類型是Int,關鍵的主鍵的字段是Bigint類型,最后找到了原因是因為當前Django升級到了3.2以上,所以每次使用migrate生成數據庫的時候,主鍵id自動會變成BigInt類型,解決方法,修改每個表的主鍵的類型為int


解決方案:

修改每個app的app.py

from django.apps import AppConfig

class GoodsConfig(AppConfig):
	# default_auto_field = 'django.db.models.BigAutoField'
    default_auto_field = 'django.db.models.AutoField'
    name = 'apps.goods'

修改BigAutoField 為AutoField

原文鏈接:https://blog.csdn.net/m0_69082030/article/details/126945315

欄目分類
最近更新