[PYTHON] Définissez BigIntegerField sur l'incrémentation automatique

Je vais l'oublier, alors faites une note pour moi-même. Dans Django, il y a AutoField, mais la clonne de la base de données créée par celui-ci sera int.

Je veux incrémenter automatiquement avec bigint. Il y avait une personne gentille dans le débordement de pile.

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"])

Pour ceux qui n'utilisent pas le sud

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)


Cela semble être bien.

Expérience

Tout d'abord, préparez un modèle de test Une chose à noter lors de l'utilisation d'AutoIncrement est s'il a été utilisé dans un autre champ.

A model can't have more than one AutoField.

Je me mets en colère.

from django.db import models
class test(models.Model):
	id = BigAutoField(primary_key=True)
python manage.py syncdb

résultat

スクリーンショット 2015-09-13 16.58.14.png

C'est devenu auto_increment!

Si vous avez des suppléments ou des erreurs, veuillez les signaler.

référence: http://stackoverflow.com/questions/2672975/django-biginteger-auto-increment-field-as-primary-key

Recommended Posts

Définissez BigIntegerField sur l'incrémentation automatique
Définissez VSCode sur PyCharm.