Динамический класс на основе запроса к базе данных в Python (Django) - PullRequest
0 голосов
/ 19 декабря 2011

Я бы хотел сделать что-то подобное в Django:

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

Цель состоит в том, чтобы создать одно поле формы для каждого элемента, возвращаемого из запроса к базе данных. Поэтому, если я получу десять элементов из запроса, в классе будет десять переменных, каждая из которых будет названа в честь возвращаемого элемента.

Это кажется теоретически возможным, но есть ли здесь какая-то опасность? Элементы в базе данных не генерируются пользователем.

Ответы [ 2 ]

2 голосов
/ 19 декабря 2011

Вы можете динамически изменять форму, как вам угодно:

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

Я полагаю, что опасность заключается в том, что состояние базы данных изменяется, когда пользователь отправляет форму, и новая форма инициализируется новыми полями, которыепредыдущая форма не имела.

0 голосов
/ 20 декабря 2011

на вашем месте я бы использовал набор форм django.

Почему наборы форм здесь не подходят?

...