Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django modelformset#u工厂不';不包括实际形式_Python_Django_Forms_Django Forms - Fatal编程技术网

Python django modelformset#u工厂不';不包括实际形式

Python django modelformset#u工厂不';不包括实际形式,python,django,forms,django-forms,Python,Django,Forms,Django Forms,我一直在尝试遵循教程和其他SO问题,并创建了一个modelformset\u工厂,它显示了html中类似表单的列表,但结果表明它们不是实际的表单 显示的html: <div ='container'> <div class='row'><tr><th><label for="id_form-0-config_key">Config key:</label></th><td><i

我一直在尝试遵循教程和其他SO问题,并创建了一个
modelformset\u工厂
,它显示了html中类似表单的列表,但结果表明它们不是实际的表单

显示的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>
是的,我手动添加了
submit
按钮,希望能让这些功能正常工作,但是如果没有
form
标签,那么
submit
按钮将不会起任何作用。 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:

class serverConfig(models.Model):

    config_key = models.CharField(max_length=63)
    config_value = models.CharField(max_length=63)
我曾经尝试过使用
finalFormSet=formset\u工厂(serverForm,extra=0)
,但是我在html中没有得到任何内容…

如中所述,您必须手动添加表单标记。这与显示单个表单时的操作没有太大区别

看起来您正在迭代表单集并逐个显示它们。这意味着您还必须添加管理表单

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

{{formset.management_form}
{formset%中表单的%s}
{{form}}
{%endfor%}
或者,您将收到有关丢失或配置错误的管理表单的错误信息

请注意,它不包括标签或提交按钮。我们必须在模板中自己提供这些

阅读更多:


您没有获得
标记的原因是,从逻辑角度来看,表单验证可以在应用程序中的任何位置处理。这就是为什么您需要使用目标url(好用)、方法和其他参数显式地指定表单标记。

此时,我只是在
{%csrf\u token%}
之前手动添加
{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>