How do I pass a parameter to my form?
someView()..     form = StylesForm(data_dict) # I also want to pass in site_id here.  class StylesForm(forms.Form):     # I want access to site_id here 
                You should define the __init__ method of your form, like that:
class StylesForm(forms.Form):     def __init__(self,*args,**kwargs):         self.site_id = kwargs.pop('site_id')         super(StylesForm,self).__init__(*args,**kwargs)   of course you cannot access self.site_id until the object has been created, so the line:
     height = forms.CharField(widget=forms.TextInput(attrs={'size':site_id}))   makes no sense. You have to add the attribute to the widget after the form has been created. Try something like this:
class StylesForm(forms.Form):     def __init__(self,*args,**kwargs):         self.site_id = kwargs.pop('site_id')         super(StylesForm,self).__init__(*args,**kwargs)         self.fields['height'].widget = forms.TextInput(attrs={'size':site_id})      height = forms.CharField()   (not tested)
This is what worked for me. I was trying to make a custom form . This field in the model is a charfield but I wanted a choice field generated dynamically .
The Form:
class AddRatingForRound(forms.ModelForm):      def __init__(self, round_list, *args, **kwargs):         super(AddRatingForRound, self).__init__(*args, **kwargs)         self.fields['name'] = forms.ChoiceField(choices=tuple([(name, name) for name in round_list]))      class Meta:         model = models.RatingSheet         fields = ('name', )   The Views:
    interview = Interview.objects.get(pk=interview_pk)     all_rounds = interview.round_set.order_by('created_at')     all_round_names = [rnd.name for rnd in all_rounds]     form = forms.AddRatingForRound(all_round_names)     return render(request, 'add_rating.html', {'form': form, 'interview': interview, 'rounds': all_rounds})   The Template:
<form method="post">     {% csrf_token %}     {% if interview %}      {{ interview }}     {% if rounds %}         {{ form.as_p }}         <input type="submit" value="Submit" />     {% else %}         <h3>No rounds found</h3>     {% endif %} </form> 
                        If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With