我目前正在建设一个项目,涉及到很多集体智慧。访问该网站的每个用户都会创建一个唯一的配置文件,然后他们的数据将用于计算自己和其他用户的最佳匹配。
默认情况下,Django创建一个INT(11)id
字段来处理模型主键。我担心这会很快被溢出(即大约24亿个设备在没有事先设置cookie的情况下访问页面)。如何在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 1.10,Django现在内置了一个bigatofield:
https://docs.djangoproject.com/en/1.10/ref/models/fields/#bigautofield
灵感来自lfagundes,但有一个小而重要的修正:
注意,我不是扩展bigingerfield,而是扩展AutoField。这是一个重要的区别。使用AutoField,Django将从数据库中检索自动递增的id,而biginger则不会。
从bigingerfield更改为AutoField时的一个问题是在AutoField中将数据转换为int。
Django's AutoField的通知:
以及
事实证明这是可以的,正如在python shell中所验证的那样:
换句话说,强制转换为int不会截断数字,也不会更改基础类型。
相关问题 更多 >
编程相关推荐