Djangoフォーム:パラメータをフォームに渡す



Django Forms Pass Parameter Form



解決:

フォームの__init__メソッドを次のように定義する必要があります。

class StylesForm(forms.Form):def __init __(self、* args、** kwargs):self.site_id = kwargs.pop( 'site_id')super(StylesForm、self).__ init __(* args、** kwargs)

もちろん、オブジェクトが作成されるまでself.site_idにアクセスできないため、次の行になります。



高さ= forms.CharField(widget = forms.TextInput(attrs = {'size':site_id}))

意味がありません。フォームを作成した後、ウィジェットに属性を追加する必要があります。次のようなものを試してください。

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()

(未検証)




これは私のために働いたものです。カスタムフォームを作成しようとしていました。モデルのこのフィールドはcharfieldですが、動的に生成される選択フィールドが必要でした。

フォーム:

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'、)

ビュー:



インタビュー= 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 '、{'フォーム ':フォーム、'インタビュー ':インタビュー、'ラウンド ':all_rounds})

テンプレート:

{%csrf_token%} {%ifインタビュー%} {{インタビュー}} {%ifラウンド%} {{form.as_p}} {%else%}

ラウンドが見つかりません

{%endif%}