Pythonでのデータベースクエリに基づく動的クラス(Django)

私はこのようなDjangoで何かしたいと思います:

class MyForm(forms.Form):
     items = Items.objects.all()
     for item in items:
         # How does this part work?
         exec(item.name) = forms.BooleanField()

目標は、データベースクエリから返された各アイテムの1つのフォームフィールドを作成することです。したがって、クエリから10個のアイテムを戻すと、そのクラスには10個の変数があり、それぞれが返されたアイテムの名前を付けられます。

これは理論的には可能ですが、ここでは危険がありますか?データベース内の項目はユーザー生成されません。

0

2 答え

フォームを動的に変更することはできますが、

class MyForm(forms.Form):
    def __init__(self, *args, **kwargs):
         super(MyForm, self).__init__(*args, **kwargs)
         for item in Item.objects.all():
              self.fields[item.name] = forms.BooleanField()

ユーザーがフォームを送信している間にデータベースの状態が変更され、新しいフォームが以前のフォームにはなかった新しいフィールドで初期化される場合、危険が生じると私は考えています。

2
追加された
魅力のように働く、ありがとう。私はまた、この記事を投稿した後、実際に詳細に入りました: jacobian.org/writing/動的フォーム生成
追加された 著者 mlissner,

もし私があなただったら、私はdjangoの書式を使用したでしょう。

なぜフォームセットはオプションではなかったのですか?

0
追加された
実際、私は書式を使ったことはありません。 Djangoは巨大です。うまくいけば、私はまだそれの別の部分を学ぶ必要はありません。
追加された 著者 mlissner,