Kaydet (Commit) 2d12a599 authored tarafından Adam DePue's avatar Adam DePue Kaydeden (comit) Tim Graham

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

The issue was fixed on master in e9103402.
üst d4bec655
...@@ -17,6 +17,10 @@ class DatabaseValidation(BaseDatabaseValidation): ...@@ -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)):
......
...@@ -51,8 +51,11 @@ Bugfixes ...@@ -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`).
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, [])
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment