忘れてしまいそうなので、自分用にメモ。
DjangoではAutoFieldというのがありますが、それで作成されるdatabaseのclumnはintになってしまいます。
bigint でauto incrementさせたい。
stackoverflowに親切な人がいた。
from django.db.models import fields
from south.modelsinspector import add_introspection_rules
class BigAutoField(fields.AutoField):
def db_type(self, connection):
if 'mysql' in connection.__class__.__module__:
return 'bigint AUTO_INCREMENT'
return super(BigAutoField, self).db_type(connection)
add_introspection_rules([], ["^MYAPP\.fields\.BigAutoField"])
southを使用しない人は
from django.db.models import fields
class BigAutoField(fields.AutoField):
def db_type(self, connection):
if 'mysql' in connection.__class__.__module__:
return 'bigint AUTO_INCREMENT'
return super(BigAutoField, self).db_type(connection)
これでいいみたいです。
#実験
まずテストのモデル用意
AutoIncrementを使用するときの注意としては、他のfieldで使用されてしまっていた場合
A model can't have more than one AutoField.
と出て怒られます。
from django.db import models
class test(models.Model):
id = BigAutoField(primary_key=True)
python manage.py syncdb
auto_incrementになってました!
補足や間違いあれば、ご指摘お願いします。
参考:
http://stackoverflow.com/questions/2672975/django-biginteger-auto-increment-field-as-primary-key