class LazyChoiceField(forms.ChoiceField):
'''
A Lazy ChoiceField.
This ChoiceField does not unwind choices until a deepcopy is called on it.
This allows for dynamic choices generation every time an instance of a Form is created.
'''
def __init__(self, *args, **kwargs):
# remove choices from kwargs
self._lazy_choices = kwargs.pop('choices',())
super(LazyChoiceField,self).__init__(*args, **kwargs)
def __deepcopy__(self, memo):
result = super(LazyChoiceField,self).__deepcopy__(memo)
result.choices = self._lazy_choices
return result
Comments