Django: вызов ModelForm через метод экземпляра - отдельные поля - PullRequest
0 голосов
/ 13 октября 2010

Можно ли вывести ModelForm, используя метод класса; например:

def edit_form(self, *args, **kwargs):
    from smf.node.forms import MediaBaseForm
    return MediaBaseForm(instance=self)

(MediaBaseForm является подклассом ModelForm для модели Media), а затем в представлении:

form = node.edit_form()
(node contains the instance)

Этот код выполняется без ошибок; однако при просмотре страницы поля формы не создаются, когда я пытаюсь визуализировать каждое поле отдельно. Форма отображается, когда я использую {{ formset }}, но не использую {% for form in formset.forms %}} ..etc. {% endfor %} ->

Мне нужно это:

{{ formset.management_form }}
    {% for form in formset.forms %}

        {{ form.id }}
        <div id="form_title">Title: {{ form.title }}</div>
        <p>Description:</p> {{ form.description }}
        <p>Comment settings:</p> {{ form.comment }}
        <p>Promoted to frontpage:</p> {{ form.promote }}
        <p>Sticky:</p> {{ form.sticky }}
        <p>Ready for Publishing:</p> {{ form.status }}
    {% endfor %}

вместо этого:

{{ formset }}    

Разве нельзя так назвать форму или я что-то не так делаю?

Полный вид:

def node_edit(request, nid):
        #Build the standard node form
        node = node_load(nid)
        obj = node_get_model(node.type, True)
        #modelFormset = modelformset_factory(obj, max_num=1)
        form = node.edit_form()

    if request.method == 'POST': # If the form has been submitted...
        #form = modelFormset(request.POST, request.FILES)
        form = node.edit_form()
        if form.is_valid():
            instances = form.save(commit=False)
            for instance in instances:
                instance.save()
            node_post_process(node, request, obj)

            if 'save_edit' in request.POST:
                id = int(nid)
                return HttpResponseRedirect('/edit/%i' %(id))
            if 'save' in request.POST:
                #id = node_callback_value.Node_ptr
                id = int(nid)
                return HttpResponseRedirect('/content/%i' %(id))
            if 'savenew' in request.POST:
                return HttpResponseRedirect('/content/add/%s' %(node.type))                
    else:
        output = {}
        #form = modelFormset(queryset=obj.objects.filter(node_ptr=nid))
        form = node.edit_form(instance=node)
    output = {
    'formset': form,
    'node': node,
    }
    try:
        return render_to_response('node/forms/%s.edit.html' %(node.type), output)
    except TemplateDoesNotExist:
        return render_to_response('node/forms/default.form.html', {
            'formset': form,
        })     

1 Ответ

0 голосов
/ 13 октября 2010

Я не могу понять, что ты пытаешься сделать. Однако у вашего подхода есть ряд проблем.

Во-первых, нет способа передать значения POST в экземпляр формы. В результате, form.is_valid() всегда будет ложным.

Во-вторых, результат node.edit_form() выглядит как одна форма, а не как форма. Поэтому я не знаю, почему вы передаете его в контекст шаблона как formset и пытаетесь перебрать formset.forms.

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