Python django modelformset#u工厂不';不包括实际形式
我一直在尝试遵循教程和其他SO问题,并创建了一个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
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>