mirror of
https://github.com/django/django.git
synced 2025-05-04 22:17:34 +00:00
Complete rework of translating data values from database Deprecation of SubfieldBase, removal of resolve_columns and convert_values in favour of a more general converter based approach and public API Field.from_db_value(). Now works seamlessly with aggregation, .values() and raw queries. Thanks to akaariai in particular for extensive advice and inspiration, also to shaib, manfre and timograham for their reviews.
36 lines
1.3 KiB
Python
36 lines
1.3 KiB
Python
from django.core import checks
|
|
from django.db.backends import BaseDatabaseValidation
|
|
|
|
|
|
class DatabaseValidation(BaseDatabaseValidation):
|
|
def check_field(self, field, **kwargs):
|
|
"""
|
|
MySQL has the following field length restriction:
|
|
No character (varchar) fields can have a length exceeding 255
|
|
characters if they have a unique index on them.
|
|
"""
|
|
from django.db import connection
|
|
|
|
errors = super(DatabaseValidation, self).check_field(field, **kwargs)
|
|
|
|
# Ignore any related fields.
|
|
if getattr(field, 'rel', None) is None:
|
|
field_type = field.db_type(connection)
|
|
|
|
# Ignore any non-concrete fields
|
|
if field_type is None:
|
|
return errors
|
|
|
|
if (field_type.startswith('varchar') # Look for CharFields...
|
|
and field.unique # ... that are unique
|
|
and (field.max_length is None or int(field.max_length) > 255)):
|
|
errors.append(
|
|
checks.Error(
|
|
('MySQL does not allow unique CharFields to have a max_length > 255.'),
|
|
hint=None,
|
|
obj=field,
|
|
id='mysql.E001',
|
|
)
|
|
)
|
|
return errors
|