Ich werde es vergessen, also mach dir eine Notiz für mich. In Django gibt es AutoField, aber die von ihm erstellte Spalte der Datenbank lautet int.
Ich möchte mit bigint automatisch inkrementieren. Es gab eine freundliche Person im Stapelüberlauf.
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"])
Für diejenigen, die den Süden nicht nutzen
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)
Das scheint in Ordnung zu sein.
Bereiten Sie zunächst ein Testmodell vor Bei der Verwendung von AutoIncrement ist zu beachten, ob es in einem anderen Feld verwendet wurde.
A model can't have more than one AutoField.
Ich werde böse.
from django.db import models
class test(models.Model):
id = BigAutoField(primary_key=True)
python manage.py syncdb
Es wurde auto_increment!
Wenn Sie Ergänzungen oder Fehler haben, weisen Sie bitte darauf hin.
Referenz: http://stackoverflow.com/questions/2672975/django-biginteger-auto-increment-field-as-primary-key