在Django 1.2.4中,主键可以使用BigInteger作为AutoField吗?
看起来默认的主键类型是整数(int)。有没有办法把自动生成的主键改成大整数(big integer)呢?
8 个回答
2
我也遇到过同样的问题。
我加了一些代码,像这样:
User._meta.has_auto_field = True
User._meta.auto_field = id
然后我把id字段定义成BigIntegerField(primary_key=True)。
在我使用user.Save()之后,user.id就会有它的id了,不用再去查询一次。
我觉得这样是可以的,但这不是个很优雅的解决方案,所以我还在寻找更好的方法。
2
我看到有几种方法可以实现这个功能。不管用哪种方法,你都需要定义你的主键字段。
首先,你可以自己创建一个id字段,并重写保存方法。
modelname(models.Model):
# model definition
def save(self):
self.pkfield = nextIntFucntion()
super(modelname, self).save()
nextIntFunction()
这个函数其实很简单,只需要查询按id排序的对象,然后取出id加1就可以了。
我还找到一个链接 BigIntegerField和BigAutoField,看起来可以解决这个问题,但我自己还没有测试过。
4
我建议你使用更新版本的Django。现在官方的Django文档不再支持1.3版本,而1.3版本也不安全,已经不再维护了。我知道这个问题是在三年前提出来的,但由于至今没有被接受的答案,我想试着给个建议。
在Django 1.6.5中,你可以在你的模型里这样做:
class MyModel(models.Model):
id = models.BigIntegerField(unique=True, primary_key=True)
这里的primary_key=True
会覆盖模型默认的id字段。使用这个字段时,每当你创建一个新的模型对象,它的值会自动增加。这个功能很好用!