Skip to content

Nice working solution to make up for the absence of BigAutoField in django (#14286)

License

Notifications You must be signed in to change notification settings

remiremi/django_bigautohack

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Django BigAuto Hack

Support for BigAutoField has been a work in progress for 4 years now. But the ticket has the following valuable comment:

In the meantime, it suffices to use a standard AutoField and hack the database like so:

In the table in question, alter the field like so: ALTER TABLE [table_name] ALTER COLUMN [field_name] [data_type], where [data_type] is one of the following:

  • MySQL: bigint AUTO_INCREMENT
  • Oracle: NUMBER(19)
  • PostgreSQL: bigserial
  • SQLite: integer

For every foreign key pointing to your field, you will also need to alter the column, but with these data types:

  • MySQL: bigint
  • Oracle: NUMBER(19)
  • PostgreSQL: bigint
  • SQLite: integer

This is a pain, but you only need to do it when creating tables, once. On the other hand, users shouldn't have to hack the database for such a simple feature, in my opinion. It would be super-cool if 1.3 included a fully-functional BigAutoField.

This simple django app makes this hack less of pain. Running

$ python manage.py bigautohack myapp.MyModel

Will run the needed ALTER TABLE commands, turning the database column for MyModel's primary key into a big integer, as well as all columns referencing MyModel.

To install simply run pip install django_bigautohack and add bigautohack to your INSTALLED_APPS.

Limitation

You probably need to make generic foreign keys use a big integer as well.

About

Nice working solution to make up for the absence of BigAutoField in django (#14286)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages