Refs #28748 -- Reallowed lazy model field choices.
Regression in 3aa9ab39cc
.
This commit is contained in:
parent
3dffcb5579
commit
c03e41712b
|
@ -244,10 +244,10 @@ class Field(RegisterLookupMixin):
|
|||
if not self.choices:
|
||||
return []
|
||||
|
||||
def is_value(value):
|
||||
return isinstance(value, (str, Promise)) or not is_iterable(value)
|
||||
def is_value(value, accept_promise=True):
|
||||
return isinstance(value, (str, Promise) if accept_promise else str) or not is_iterable(value)
|
||||
|
||||
if is_value(self.choices):
|
||||
if is_value(self.choices, accept_promise=False):
|
||||
return [
|
||||
checks.Error(
|
||||
"'choices' must be an iterable (e.g., a list or tuple).",
|
||||
|
|
|
@ -4,6 +4,7 @@ from django.core.checks import Error, Warning as DjangoWarning
|
|||
from django.db import connection, models
|
||||
from django.test import SimpleTestCase, TestCase, skipIfDBFeature
|
||||
from django.test.utils import isolate_apps, override_settings
|
||||
from django.utils.functional import lazy
|
||||
from django.utils.timezone import now
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
|
@ -188,6 +189,12 @@ class CharFieldTests(TestCase):
|
|||
|
||||
self.assertEqual(Model._meta.get_field('field').check(), [])
|
||||
|
||||
def test_lazy_choices(self):
|
||||
class Model(models.Model):
|
||||
field = models.CharField(max_length=10, choices=lazy(lambda: [[1, '1'], [2, '2']], tuple)())
|
||||
|
||||
self.assertEqual(Model._meta.get_field('field').check(), [])
|
||||
|
||||
def test_choices_named_group(self):
|
||||
class Model(models.Model):
|
||||
field = models.CharField(
|
||||
|
|
Loading…
Reference in New Issue