I am trying to use custom widgets in a model formset. I have tried to achieve this by first defining the custom widget, then a form that uses this widget, then passing this form as an argument to modelformset_factory().
I don't think something is working right because if I check the type of the form objects in my formset, the objects are my own custom SliderInputs; however, when the very same formset is rendered, it renders like the default widget. They don't render with any of the content that I have added to the render method of SliderInput. Below is the shell session demonstrating that I have SliderInput widgets, then the actual class code that defines these. I am using Django 1.1.1. >>> from fd.access.models import Flavor, Recipe >>> from fd.access.forms import WeightSliderForm >>> from django.forms.models import modelformset_factory >>> >>> flavor = Flavor.objects.all()[1] >>> >>> RecipeFormSet = modelformset_factory(Recipe, form=WeightSliderForm) >>> recipe_formset = RecipeFormSet(queryset=flavor.recipe_set.all()) >>> >>> for recipe_form in recipe_formset.forms: ... print recipe_form.Meta.widgets ... {'amount': <fd.access.widgets.SliderInput object at 0x24b2a50>} {'amount': <fd.access.widgets.SliderInput object at 0x24b2a50>} {'amount': <fd.access.widgets.SliderInput object at 0x24b2a50>} {'amount': <fd.access.widgets.SliderInput object at 0x24b2a50>} {'amount': <fd.access.widgets.SliderInput object at 0x24b2a50>} >>> ####################################### class SliderInput(forms.widgets.TextInput): """ A slider widget to include in your form """ def render(self, name, value, attrs): attributes = attrs attributes['type'] = 'hidden' res = super(SliderInput, self).render(name, value, attrs = attributes) res += '<div class="slider-wrapper">' res += '<div id="%s_slider_value" class="slider-value">%d</ div>' % (name, value) res += '<div id="%s_slider_unit" class="slider-unit"></div>' % name res += '<div id="%s_slider" class="slider"></div>' % name res += '</div>' return res class Media: css = {'screen':('/media/css/widgets/slider.css',)} js = ('/media/js/widgets/slider.js',) class WeightSliderForm(forms.ModelForm): class Meta: model = Recipe fields = ['amount'] widgets = { 'amount': SliderInput(attrs={ 'max':'1000', 'min':'0', 'step':'.001', 'unit':'%', }), } -- You received this message because you are subscribed to the Google Groups "Django users" group. To post to this group, send email to django-us...@googlegroups.com. To unsubscribe from this group, send email to django-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/django-users?hl=en.