Make Django4.2 run with the mysql variant of PositiveAutoField

This commit is contained in:
László Károlyi 2023-05-13 20:06:05 +02:00
parent 17e811133a
commit 91c9dd7e9d
Signed by: karolyi
GPG key ID: 2DCAF25E55735BFE
2 changed files with 26 additions and 3 deletions

View file

@ -1,3 +1,17 @@
# Ktools
This module contains boilerplate for python projects, mostly based on django.
## Contents
### Django
#### PositiveAutoField
A mysql-based `AutoField` that will use an `UNSIGNED INT` for a primary field.
Use this in django's `settings.py`:
```
DEFAULT_AUTO_FIELD = 'ktools.django.db.models.fields.PositiveAutoField'
```

View file

@ -1,11 +1,20 @@
from django.db.backends.mysql.base import DatabaseWrapper
from django.db.backends.mysql.operations import DatabaseOperations
from django.db.models.fields import (
AutoFieldMeta, AutoFieldMixin, PositiveIntegerField)
AutoField, AutoFieldMeta, PositiveIntegerField)
DatabaseOperations.integer_field_ranges['PositiveAutoField'] = \
DatabaseOperations.integer_field_ranges['PositiveIntegerField']
DatabaseOperations.cast_data_types['PositiveAutoField'] = \
DatabaseOperations.cast_data_types['PositiveIntegerField']
DatabaseWrapper.data_types['PositiveAutoField'] = \
'integer UNSIGNED AUTO_INCREMENT'
class PositiveAutoField(
AutoFieldMixin, PositiveIntegerField, metaclass=AutoFieldMeta):
AutoField, PositiveIntegerField, metaclass=AutoFieldMeta):
def get_internal_type(self):
return "PositiveAutoField"
return 'PositiveAutoField'
def rel_db_type(self, connection):
return PositiveIntegerField().db_type(connection=connection)