我有两个 Django 模型作者和书籍。作者使用 ManyToManyField 对 Books 的引用如下:
books = models.ManyToManyField(Books)
根据 Django 的文档,将为我们自动创建一个表。如何将此自动创建的表的 id 字段从
AutoField
更改为 BigAutoField
(因为我已达到表的最大限制)而不丢失数据或移动数据,并且不运行任何 SQL 命令。
注意: 该模型是由 Django 自动创建的,而不是手动定义的。数据库中存在表,但不存在用户可以直接修改的模型。如果这是错误的,请纠正我。我找不到一个解决方案,我们可以使用具有上述限制的 Django 简单地更改自动生成的“通过”表的 id 列。
这个答案https://stackoverflow.com/a/40654521有帮助。但它涉及到创建一个 through 模型,该模型不允许在 Django v2.0 中使用 add、create 或 set,而我强烈喜欢使用它们。
我唯一能想到的在自动生成的表中获取
BigAutoField
的方法是使用 Django 3.2 中引入的设置。
# settings.py
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
# or in app_name/apps.py
from django.apps import AppConfig
class AppNameConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
FWIW,我从不使用
ManyToManyField
中自动生成的表格,因为我几乎总是最终进一步自定义它们。内联一个表单或编写一个方法来按需创建新的中间记录是很简单的,类似于 Django 的做法,并且重写 Django 的内部机制要困难得多。