Skip to content

Commit 4bf72b7

Browse files
committed
Allow select2 field choices be lazily evaluated
1 parent c228086 commit 4bf72b7

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

select2/fields.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
from django.db.models.fields import FieldDoesNotExist
66
from django.forms.models import ModelChoiceIterator
77
from django.utils.encoding import force_unicode
8+
from django.utils.functional import Promise
89
from django.db.models.fields.related import add_lazy_relation
910

1011
from .models.descriptors import SortableReverseManyRelatedObjectsDescriptor
@@ -40,6 +41,23 @@ def __init__(self, *args, **kwargs):
4041
if not hasattr(self.widget, 'is_required'):
4142
self.widget.is_required = self.required
4243

44+
@property
45+
def choices(self):
46+
"""
47+
When it's time to get the choices, if it was a lazy then figure it out
48+
now and memoize the result.
49+
"""
50+
if isinstance(self._choices, Promise):
51+
self._choices = list(self._choices)
52+
return self._choices
53+
54+
@choices.setter
55+
def choices(self, value):
56+
self._set_choices(value)
57+
58+
def _set_choices(self, value):
59+
self._choices = value
60+
4361

4462
class ChoiceField(Select2FieldMixin, forms.ChoiceField):
4563

0 commit comments

Comments
 (0)