Sometimes it is useful to have a ChoiceField which calculates its choices at runtime, when a new instance of a form containing it, is generated. And this is what
choices argument must be an iterable as for
from django import forms DynamicApplicationList =  class MyForm(forms.Form): dynamic_choice = LazyChoiceField(choices = DynamicApplicationList)
DynamicApplicationList can now be updated dynamically.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
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
More like this
- Image compression before saving the new model / work with JPG, PNG by Schleidens 1 week ago
- Help text hyperlinks by sa2812 1 month ago
- Stuff by NixonDash 3 months, 1 week ago
- Add custom fields to the built-in Group model by jmoppel 5 months, 1 week ago
- Month / Year SelectDateWidget based on django SelectDateWidget by pierreben 8 months, 3 weeks ago
Please login first before commenting.