Django добавляет отдельные поля в форму модели с помощью вызова AJAX - PullRequest
0 голосов
/ 12 января 2012

У меня есть форма модели.Форма содержит кнопку «Добавить еще поле».Нажатие на эту кнопку отправляет вызов AJAX, который должен добавить текстовое поле в форму.Можно добавить любое количество «текстовых полей».

Я не уверен, является ли Django-Formsets правильным способом сделать это, поскольку мне нужно хранить данные «дополнительных добавленных полей» в той же Таблице формы моделив базе данных.

Как этого добиться?

1 Ответ

1 голос
/ 12 января 2012

Я недавно сделал нечто похожее на это, и мое решение состояло в том, чтобы динамически разделить форму на подклассы, предоставляя только необходимое поле и отображая только это поле:

from forms import SomeModelForm
from models import SomeModel
def view_name(request,pk,field):
    SomeModelFieldForm(SomeModelForm):
        class Meta(SomeModelForm.Meta):
            fields = (field,)

    inst = SomeModel.objects.get(pk=pk)
    form = SomeModelFieldForm(instance=inst)

    #the rest of your view goes here...

    #...send only the form's field:
    ctx = {'field': form[field]}
    return render_to_response("template",ctx)

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

Однако вы не хотите отправлять всю форму, вы хотите отправить только одно поле.form[field] - это django.forms.forms.BoundField, представляющее конкретное поле, которое вы передаете.

Например, если вы работали с моделью User из django.contrib.auth.models и создали форму для указанного пользователяв режиме ожидания вызов form["username"] вернет:

<django.forms.forms.BoundField object at 0x01354750>

, а вызов print form["username"] выведет:

<input id="id_username" type="text" name="username" value="name_of_user" maxlength="30" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...