我目前正在建设一个涉及大量集体智慧的项目.每个访问该网站的用户都会创建一个唯一的配置文件,然后他们的数据被用来为他们自己和其他用户计算最佳匹配.

默认情况下,Django创建一个INT(11)id字段来处理模型主键.我担心这会很快溢出(例如,在没有事先设置cookie的情况下,约有2.4b台设备访问页面).我怎样才能将其在MySQL中表示为BIGINT,在Django中表示为long()?

我发现我可以做到以下(http://docs.djangoproject.com/en/dev/ref/models/fields/#bigintegerfield):

class MyProfile(models.Model):
    id = BigIntegerField(primary_key=True)

但是有没有办法让它像通常的id个字段那样自动递增呢?另外,我能不能不签名,这样我就有更多的空间来填写了?

谢谢!

推荐答案

从Django 3.2开始,可以通过DEFAULT_AUTO_FIELD设置(documentation)来控制隐式主键的类型.因此,不再需要覆盖所有模型中的主键.

#This setting will change all implicitly added primary keys to BigAutoField
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

请注意,从Django 3.2开始,将DEFAULT_AUTO_FIELD设置为BigAutoField(release notes)生成新项目.

Django相关问答推荐

Django、htmx删除记录并更新

无法将关键字average_rating解析为字段

Django allauth 社交帐户注册中邮箱的模板变量

Django通用列表视图与多查询搜索

root urls.py 是 Django 中的 config/urls.py 吗?

Django 仅预取相关模型的最新对象

如何在 django 中修改现有模型实例?

在 Django 中处理信用卡付款的最佳 Select 是什么?

Django 在模型中存储用户图像

Django:在模板中呈现表单字段时添加 CSS 类

模板过滤器修剪任何前导leading或尾随trailing空格

virtualenv(python3.4), pip install mysqlclient 错误

OrderingFilter 没有属性filter_queryset

使用 Django 1.5 实现多种用户类型

如何在 Django 和 django-jsonfield 中将 JSONField 的默认值设置为空列表?

django post_save 更新信号

Django - 每 x 秒运行一个函数

Django/Python初学者:执行python manage.py syncdb时出错-找不到psycopg2

django.core.servers.basehttp.FileWrapper 在 Django 1.9 中消失

判断列表 django 模板中是否存在