0

次のようなモデルがあるとします。

 class ComponentLength(models.Model):
    component_name = models.CharField(max_length=155)
    length1 = models.IntegerField()
    length2 = models.IntegerField()
    length3 = models.IntegerField()
    length4 = models.IntegerField()

これで、ユーザーがコンポーネントを選択するためのフォームができました。次のページでは、コンポーネントごとに異なる、さまざまな長さオプションの 4 つのチェックボックスを表示したいと考えています。

ユーザーが既に選択したコンポーネント名(セッションデータでアクセス可能)に基づいて、これらのチェックボックスを使用してフォームを生成するDjangoでの最良の方法は何ですか?

どんな助けでも大歓迎です。

4

2 に答える 2

0

initメソッドで、通常の django フォームを使用し、インスタンス化時にそのフィールドを変更できます。このようなもの:

class SecondForm(forms.Form):
    def __init__(self, *args, **kwargs):
        super(SecondForm, self).__init__(*args, **kwargs)
        try:
            #get the object, something like this:
            obj_ = ComponentLength.objects.get(component_name = session.get('component_name_or_whatever_you_stored'))
        except:
            #handle the error case, e.g:
            return

            self.fields['length1'] = forms.CheckboxInput(attrs={'value' : obj_.length1 })
            self.fields['length2'] = forms.CheckboxInput(attrs={'value' : obj_.length2 })
            self.fields['length3'] = forms.CheckboxInput(attrs={'value' : obj_.length3 })
            self.fields['length4'] = forms.CheckboxInput(attrs={'value' : obj_.length4 })
            #Consider using a hidden input instead of polluting the session variables
            #with form data
            self.fields['component_length'] = forms.HiddenInput(attrs={'value' : obj_.pk})

上記のコードはテストされていませんが、動作するはずです。それがどうなるか教えてください。

于 2012-11-21T01:07:07.480 に答える