mirror of
https://github.com/django/django.git
synced 2025-10-24 06:06:09 +00:00
Fixed #20430 - Enable iterable of iterables for model choices
Allows for any iterable, not just lists or tuples, to be used as the inner item for a list of choices in a model.
This commit is contained in:
@@ -375,8 +375,8 @@ invalid_models.fielderrors: "decimalfield3": DecimalFields require a "max_digits
|
||||
invalid_models.fielderrors: "decimalfield4": DecimalFields require a "max_digits" attribute value that is greater than or equal to the value of the "decimal_places" attribute.
|
||||
invalid_models.fielderrors: "filefield": FileFields require an "upload_to" attribute.
|
||||
invalid_models.fielderrors: "choices": "choices" should be iterable (e.g., a tuple or list).
|
||||
invalid_models.fielderrors: "choices2": "choices" should be a sequence of two-tuples.
|
||||
invalid_models.fielderrors: "choices2": "choices" should be a sequence of two-tuples.
|
||||
invalid_models.fielderrors: "choices2": "choices" should be a sequence of two-item iterables (e.g. list of 2 item tuples).
|
||||
invalid_models.fielderrors: "choices2": "choices" should be a sequence of two-item iterables (e.g. list of 2 item tuples).
|
||||
invalid_models.fielderrors: "index": "db_index" should be either None, True or False.
|
||||
invalid_models.fielderrors: "field_": Field names cannot end with underscores, because this would lead to ambiguous queryset filters.
|
||||
invalid_models.fielderrors: "nullbool": BooleanFields do not accept null values. Use a NullBooleanField instead.
|
||||
|
||||
0
tests/model_validation/__init__.py
Normal file
0
tests/model_validation/__init__.py
Normal file
27
tests/model_validation/models.py
Normal file
27
tests/model_validation/models.py
Normal file
@@ -0,0 +1,27 @@
|
||||
from django.db import models
|
||||
|
||||
|
||||
class ThingItem(object):
|
||||
|
||||
def __init__(self, value, display):
|
||||
self.value = value
|
||||
self.display = display
|
||||
|
||||
def __iter__(self):
|
||||
return (x for x in [self.value, self.display])
|
||||
|
||||
def __len__(self):
|
||||
return 2
|
||||
|
||||
|
||||
class Things(object):
|
||||
|
||||
def __iter__(self):
|
||||
return (x for x in [ThingItem(1, 2), ThingItem(3, 4)])
|
||||
|
||||
|
||||
class ThingWithIterableChoices(models.Model):
|
||||
|
||||
# Testing choices= Iterable of Iterables
|
||||
# See: https://code.djangoproject.com/ticket/20430
|
||||
thing = models.CharField(max_length=100, blank=True, choices=Things())
|
||||
14
tests/model_validation/tests.py
Normal file
14
tests/model_validation/tests.py
Normal file
@@ -0,0 +1,14 @@
|
||||
import io
|
||||
|
||||
from django.core import management
|
||||
from django.test import TestCase
|
||||
|
||||
|
||||
class ModelValidationTest(TestCase):
|
||||
|
||||
def test_models_validate(self):
|
||||
# All our models should validate properly
|
||||
# Validation Tests:
|
||||
# * choices= Iterable of Iterables
|
||||
# See: https://code.djangoproject.com/ticket/20430
|
||||
management.call_command("validate", stdout=io.BytesIO())
|
||||
Reference in New Issue
Block a user