[1.7.x] Fixed #23761 -- Fixed crash with MySQL validator and db_type is None.

The issue was fixed on master in e9103402c0.
This commit is contained in:
Adam DePue 2014-11-05 02:57:47 +00:00 committed by Tim Graham
parent d4bec655ae
commit 2d12a59938
3 changed files with 28 additions and 1 deletions

View File

@ -17,6 +17,10 @@ class DatabaseValidation(BaseDatabaseValidation):
if getattr(field, 'rel', None) is None: if getattr(field, 'rel', None) is None:
field_type = field.db_type(connection) 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... if (field_type.startswith('varchar') # Look for CharFields...
and field.unique # ... that are unique and field.unique # ... that are unique
and (field.max_length is None or int(field.max_length) > 255)): and (field.max_length is None or int(field.max_length) > 255)):

View File

@ -51,8 +51,11 @@ Bugfixes
(:ticket:`23420`). (:ticket:`23420`).
* Fixed a migration serializing bug involving ``float("nan")`` and * Fixed a migration serializing bug involving ``float("nan")`` and
``float("inf")`` (:ticket:23770:). ``float("inf")`` (:ticket:`23770`).
* Fixed a regression where custom form fields having a ``queryset`` attribute * Fixed a regression where custom form fields having a ``queryset`` attribute
but no ``limit_choices_to`` could not be used in a but no ``limit_choices_to`` could not be used in a
:class:`~django.forms.ModelForm` (:ticket:`23795`). :class:`~django.forms.ModelForm` (:ticket:`23795`).
* Fixed a custom field type validation error with MySQL backend when
``db_type`` returned ``None`` (:ticket:`23761`).

View File

@ -0,0 +1,20 @@
from django.db import models
from .base import IsolatedModelsTestCase
class CustomFieldTest(IsolatedModelsTestCase):
def test_none_column(self):
class NoColumnField(models.AutoField):
def db_type(self, connection):
# None indicates not to create a column in the database.
return None
class Model(models.Model):
field = NoColumnField(primary_key=True, db_column="other_field")
other_field = models.IntegerField()
field = Model._meta.get_field('field')
errors = field.check()
self.assertEqual(errors, [])