построение динамических форм в Джанго - PullRequest
2 голосов
/ 10 февраля 2010

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

Как мне динамически построить форму в моем представлении из данных в БД?

Спасибо

Ответы [ 2 ]

10 голосов
/ 10 февраля 2010

Вот слайды из выступления, которое я дал на EuroDjangoCon о том, как именно это сделать: http://www.slideshare.net/kingkilr/forms-getting-your-moneys-worth

4 голосов
/ 10 февраля 2010

Django отлично работает, автоматически генерируя формы из ваших определений модели.

Первым шагом может быть создание модели Django, которая отражает вашу существующую базу данных.

Относительно флажка / текстового поля:

Django имеет большое разделение между полями и виджетами . У вас может быть IntegerField , в котором хранятся числа, но вы можете изменить виджет, который отображается для пользователя, когда он хочет изменить этот номер. В некоторых случаях у вас может быть поле ввода, в других текстовая область, или, возможно, раскрывающийся список. Поле позаботится о таких деталях, как преобразование типов и проверка, виджет определяет, как будет выглядеть поле формы.

С определенными типами полей связаны виджеты по умолчанию, но вы можете их переопределить.

Также обратите внимание, что существует разница между полями формы и полями модели .


Чтобы сделать это динамически, можете добавлять элементы в SoftDict self.fields на лету. То есть:

from django.forms.forms import Form
from django.forms.fields import CharField
class FunkyForm(Form):
    def __init__(self, *args, **kwargs):
        super(FunkyForm, self).__init__(*args, **kwargs)
        for item in range(5):
            self.fields['test_field_%s' % item] = CharField(max_length=255)

Даст вам класс формы, который создается с 5 динамически генерируемыми CharFields.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...