Commit 2d12a599 authored by Adam DePue's avatar Adam DePue Committed by Tim Graham
Browse files

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

The issue was fixed on master in e9103402.
parent d4bec655
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -17,6 +17,10 @@ class DatabaseValidation(BaseDatabaseValidation):
        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)):
+4 −1
Original line number Diff line number Diff line
@@ -51,8 +51,11 @@ Bugfixes
  (:ticket:`23420`).

* 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
  but no ``limit_choices_to`` could not be used in a
  :class:`~django.forms.ModelForm` (:ticket:`23795`).

* Fixed a custom field type validation error with MySQL backend when
  ``db_type`` returned ``None`` (:ticket:`23761`).
+20 −0
Original line number Diff line number Diff line
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, [])