django modelformset_factory不包含实际表格 [英] django modelformset_factory doesn't include actual forms

查看:61
本文介绍了django modelformset_factory不包含实际表格的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我一直在尝试遵循教程和其他SO问题,并且有一个 modelformset_factory 可以显示html中看起来像表格的列表,但事实证明它们不是实际的表格.

I've been trying to follow tutorials and other SO questions and have a modelformset_factory that's displaying a list of what looks like forms in the html, but it turns out they're not actual forms.

html:

<div ='container'>

        <div class='row'><tr><th><label for="id_form-0-config_key">Config key:</label></th><td><input id="id_form-0-config_key" maxlength="63" name="form-0-config_key" type="text" value="ClientMustVerify" /></td></tr>
<tr><th><label for="id_form-0-config_value">Config value:</label></th><td><input id="id_form-0-config_value" maxlength="63" name="form-0-config_value" type="text" value="TRUE" /><input id="id_form-0-id" name="form-0-id" type="hidden" value="3" /></td></tr> <input type="submit" value="Update" /></div>

        <div class='row'><tr><th><label for="id_form-1-config_key">Config key:</label></th><td><input id="id_form-1-config_key" maxlength="63" name="form-1-config_key" type="text" value="Auditing" /></td></tr>
<tr><th><label for="id_form-1-config_value">Config value:</label></th><td><input id="id_form-1-config_value" maxlength="63" name="form-1-config_value" type="text" value="FALSE" /><input id="id_form-1-id" name="form-1-id" type="hidden" value="4" /></td></tr> <input type="submit" value="Update" /></div>

    <div>

请注意,任何地方都没有 form 标记.向后工作,这是模板的摘录:

notice there is no form tag anywhere. working backwards, here's the excerpt from the template:

<div ='container'>
    {% for form in formset %}
        <div class='row'>{{form}} <input type="submit" value="Update" /></div>
    {% endfor %}
<div>

是的,我手动添加了 submit 按钮,希望它们能够正常工作,但是,当然,如果没有 form 标记,那么 submit按钮不会执行任何操作.views.py:

yes, I added the submit button manually hoping to get these to work, but of course if there isn't a form tag, then the submit button won't do anything. views.py:

from limbo.models import serverConfig
from django.forms import modelformset_factory
from django.forms import formset_factory

def editServer(request):
    result = serverConfig.objects.values()
    myConfigs = [entry for entry in result]

    finalFormSet = modelformset_factory(serverConfig, exclude=('id',), extra=0)
#other lines
    return render(request, 'limboHtml/ServerConfiguration.html', {'formset': finalFormSet, 'SubmitMessage': '', 'CurrentConfigs': myConfigs})

forms.py:

class serverForm(ModelForm):
    class Meta:
        model = serverConfig
        fields = ['config_key', 'config_value']
    def __init__(self, *args, **kwargs):
        super(serverForm, self).__init__(*args, **kwargs)
        instance = getattr(self, 'instance', None)
        if instance and instance.pk:
            self.fields['config_key'].widget.attrs['readonly'] = True
            self.fields['config_key'].widget.attrs['disabled'] = True

和models.py:

and models.py:

class serverConfig(models.Model):

    config_key = models.CharField(max_length=63)
    config_value = models.CharField(max_length=63)

我曾经尝试过使用 finalFormSet = formset_factory(serverForm,extra = 0),但是后来我在html中没有任何内容...

I tried using finalFormSet = formset_factory(serverForm, extra=0) at one point, but then I just got no content in the html...

推荐答案

As described in the formset documention you must add the form tag manually. This is not very different from what you do when displaying a single form.

您似乎正在遍历表单集并逐一显示它们.这意味着您还必须添加管理表单

It appears that you are iterating through the formset and displayig them one by one. That means you must also add the management form

<form method="post" action="">
    {{ formset.management_form }}
    <div ='container'>
        {% for form in formset %}
            <div class='row'>{{form}} <input type="submit" value="Update" /></div>
        {% endfor %}
    <div>
</form>

否则,您将收到有关缺少或配置错误的管理表单的错误.

Or you will get errors about a missing or misconfigured management form.

这篇关于django modelformset_factory不包含实际表格的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆