Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.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
Django 编辑键/值参数列表表单集_Django - Fatal编程技术网

Django 编辑键/值参数列表表单集

Django 编辑键/值参数列表表单集,django,Django,我正在寻找一个方便的解决方案来创建“编辑设置”键/值页面 参数模型: class Parameter(models.Model): key = models.CharField(max_length=50) value = models.CharField(max_length=250) showInUI = models.SmallIntegerField() 初始键/值已插入表中。 我使用模型表单集工厂加载并发送它们,使用以下行: ParameterFormSet

我正在寻找一个方便的解决方案来创建“编辑设置”键/值页面

参数模型:

class Parameter(models.Model):
    key = models.CharField(max_length=50)
    value = models.CharField(max_length=250)
    showInUI = models.SmallIntegerField()
初始键/值已插入表中。 我使用模型表单集工厂加载并发送它们,使用以下行:

ParameterFormSet = modelformset_factory(Parameter, extra=0, fields=('key', 'value'))
parameterFormSet = ParameterFormSet(queryset=Parameter.objects.filter(showInUI=1))
return render_to_response('config.html', {'parameterFormSet': parameterFormSet}, context_instance=RequestContext(request))
在模板端,当显示formset时,键和值显示为输入

我想找到一种方便的方法,将表单键显示为只读标签,将值显示为输入。提交时,根据django标准对其进行验证

我读过很多东西,我想解决方案可能是一个定制的小部件,但我可以找到一个可靠的解决方案

谢谢你的阅读

编辑:

工作溶液

views.py

def config(request):
    ParameterFormSet = modelformset_factory(Parameter, extra=0, fields=('value',))
    if request.method == "POST":
        try:
            formset = ParameterFormSet(request.POST, request.FILES)
        except ValidationError:
            formset = None
            return HttpResponse("ko")
        if formset.is_valid():
            formset.save()
            return HttpResponse("ok")
    #ParameterFormSet = modelformset_factory(Parameter, extra=0, fields=('value',))
    parameterFormSet = ParameterFormSet(queryset=Parameter.objects.filter(showInUI=1))
    return render_to_response('config.html', {'parameterFormSet': parameterFormSet}, context_instance=RequestContext(request))
模板

<form method="post">
    {% csrf_token %}
    {{ parameterFormSet.management_form }}
    {% for form in parameterFormSet %}
        <div>
        {{ form.instance.key }}
        {{ form }}
        </div>
    {% endfor %}
    <input type="submit" />
</form>

{%csrf_令牌%}
{{parameterFormSet.management_form}
{parameterFormSet%中表单的%s}
{{form.instance.key}
{{form}}
{%endfor%}

如果不希望该值可编辑,则在创建表单集时不要将其包含在
字段中

ParameterFormSet = modelformset_factory(Parameter, extra=0, fields=('value',)) # don't forget the trailing comma after 'value' otherwise it's not a tuple!
在模板中,您可以在表单集中的表单中循环,同时显示键

{% for form in parameter_form_set %}
    {{ form.instance.key }}{# display the key related to this form #}
    {{ form }}{# display the form #}
{% endfor %}

谢谢,易于实施和工作解决方案。用工作代码编辑了我的答案。