如何更改 Django 中自动创建的 ManyToManyField 模型

问题描述 投票:0回答:1

我有两个 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,而我强烈喜欢使用它们。

django django-models model many-to-many
1个回答
0
投票

我唯一能想到的在自动生成的表中获取

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 的内部机制要困难得多。

© www.soinside.com 2019 - 2024. All rights reserved.