python - 无法在 Django 中使用 FK 创建新表
问题描述
我正在尝试向我的 mysql 数据库添加一个新表。该表仅包含两个项目,每个项目都是一个 foreignKey(再往下)。但是,在将更改迁移到数据库时,我收到一条错误消息(进一步向下),我知道问题出在HS_Countries
foreignKey 中,因为我对其进行了测试,并且可以在该键不存在时迁移表。
我有其他表,我有一个HS_Countries
外键。这就是为什么我对这个问题很困惑。的结构HS_Countries
再往下,也是其他foreignKey的结构。
我不确定我必须进行哪些更改才能使迁移正常工作。
新表:
class User_Accumulated_Countries(models.Model):
iso_code = models.ForeignKey(
'HS_Countries', on_delete=models.CASCADE, related_name='iso_code')
product = models.ForeignKey(
'User_Product', on_delete=models.CASCADE, related_name='product')
控制台日志:
Operations to perform:
Apply all migrations: main
Running migrations:
Applying main.0113_user_accumulated_countries...Traceback (most recent call last):
File "/Users/5knnbdwm/Python_env/lib/python3.8/site-packages/django/db/backends/utils.py", line 86, in _execute
return self.cursor.execute(sql, params)
File "/Users/5knnbdwm/Python_env/lib/python3.8/site-packages/django/db/backends/mysql/base.py", line 74, in execute
return self.cursor.execute(query, args)
File "/Users/5knnbdwm/Python_env/lib/python3.8/site-packages/MySQLdb/cursors.py", line 209, in execute
res = self._query(query)
File "/Users/5knnbdwm/Python_env/lib/python3.8/site-packages/MySQLdb/cursors.py", line 315, in _query
db.query(q)
File "/Users/5knnbdwm/Python_env/lib/python3.8/site-packages/MySQLdb/connections.py", line 239, in query
_mysql.connection.query(self, query)
MySQLdb._exceptions.OperationalError: (3780, "Referencing column 'iso_code_id' and referenced column 'iso_code' in foreign key constraint 'main_user_accumulate_iso_code_id_65d73d54_fk_main_hs_c' are incompatible.")
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "manage.py", line 31, in <module>
execute_from_command_line(sys.argv)
File "/Users/5knnbdwm/Python_env/lib/python3.8/site-packages/django/core/management/__init__.py", line 401, in execute_from_command_line
utility.execute()
File "/Users/5knnbdwm/Python_env/lib/python3.8/site-packages/django/core/management/__init__.py", line 395, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/Users/5knnbdwm/Python_env/lib/python3.8/site-packages/django/core/management/base.py", line 328, in run_from_argv
self.execute(*args, **cmd_options)
File "/Users/5knnbdwm/Python_env/lib/python3.8/site-packages/django/core/management/base.py", line 369, in execute
output = self.handle(*args, **options)
File "/Users/5knnbdwm/Python_env/lib/python3.8/site-packages/django/core/management/base.py", line 83, in wrapped
res = handle_func(*args, **kwargs)
File "/Users/5knnbdwm/Python_env/lib/python3.8/site-packages/django/core/management/commands/migrate.py", line 231, in handle
post_migrate_state = executor.migrate(
File "/Users/5knnbdwm/Python_env/lib/python3.8/site-packages/django/db/migrations/executor.py", line 117, in migrate
state = self._migrate_all_forwards(state, plan, full_plan, fake=fake, fake_initial=fake_initial)
File "/Users/5knnbdwm/Python_env/lib/python3.8/site-packages/django/db/migrations/executor.py", line 147, in _migrate_all_forwards
state = self.apply_migration(state, migration, fake=fake, fake_initial=fake_initial)
File "/Users/5knnbdwm/Python_env/lib/python3.8/site-packages/django/db/migrations/executor.py", line 247, in apply_migration
migration_recorded = True
File "/Users/5knnbdwm/Python_env/lib/python3.8/site-packages/django/db/backends/base/schema.py", line 115, in __exit__
self.execute(sql)
File "/Users/5knnbdwm/Python_env/lib/python3.8/site-packages/django/db/backends/base/schema.py", line 142, in execute
cursor.execute(sql, params)
File "/Users/5knnbdwm/Python_env/lib/python3.8/site-packages/django/db/backends/utils.py", line 100, in execute
return super().execute(sql, params)
File "/Users/5knnbdwm/Python_env/lib/python3.8/site-packages/django/db/backends/utils.py", line 68, in execute
return self._execute_with_wrappers(sql, params, many=False, executor=self._execute)
File "/Users/5knnbdwm/Python_env/lib/python3.8/site-packages/django/db/backends/utils.py", line 77, in _execute_with_wrappers
return executor(sql, params, many, context)
File "/Users/5knnbdwm/Python_env/lib/python3.8/site-packages/django/db/backends/utils.py", line 86, in _execute
return self.cursor.execute(sql, params)
File "/Users/5knnbdwm/Python_env/lib/python3.8/site-packages/django/db/utils.py", line 90, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "/Users/5knnbdwm/Python_env/lib/python3.8/site-packages/django/db/backends/utils.py", line 86, in _execute
return self.cursor.execute(sql, params)
File "/Users/5knnbdwm/Python_env/lib/python3.8/site-packages/django/db/backends/mysql/base.py", line 74, in execute
return self.cursor.execute(query, args)
File "/Users/5knnbdwm/Python_env/lib/python3.8/site-packages/MySQLdb/cursors.py", line 209, in execute
res = self._query(query)
File "/Users/5knnbdwm/Python_env/lib/python3.8/site-packages/MySQLdb/cursors.py", line 315, in _query
db.query(q)
File "/Users/5knnbdwm/Python_env/lib/python3.8/site-packages/MySQLdb/connections.py", line 239, in query
_mysql.connection.query(self, query)
django.db.utils.OperationalError: (3780, "Referencing column 'iso_code_id' and referenced column 'iso_code' in foreign key constraint 'main_user_accumulate_iso_code_id_65d73d54_fk_main_hs_c' are incompatible.")
其他外键:
class HS_Countries(models.Model):
iso_code = models.CharField(primary_key=True, max_length=2)
country = models.CharField(max_length=255)
eu = models.BooleanField(null=True)
fta = models.BooleanField(null=True)
# ...
class User_Product(models.Model):
code = models.ForeignKey('HS_Code', on_delete=models.CASCADE, null=False)
article_id_own = models.TextField()
article_id_customer = models.TextField(null=True)
article_name_own = models.TextField()
article_name_customer = models.TextField(null=True)
country_of_origin = models.ForeignKey(
'HS_Countries', on_delete=models.CASCADE, null=False)
accumulated = models.BooleanField(null=True)
解决方案
推荐阅读
- sql-server-2008 - SQL 数据传输
- javascript - 如何加载没有包含或 JSX 的 Material-UI 图标?
- spring-boot - 找不到“org.thymeleaf.TemplateEngine”类型的 bean
- wagtail - Wagtail - 如何在页面资源管理器中禁用某些操作
- java - 从 JSONObject 获取数据
- python - 可视化 3d 集群
- php - 有没有办法在 Symfony 中使用表单发送 GET 请求并避免在更改 URL 时重新加载页面?
- python - 在python中,niter是什么,counter有什么不同?
- javascript - 通过单击将单选按钮值插入 mysql
- python - Flake8 使用系统 python 代替 virtualenv