2013-05-18 43 views
2

我正在尋找一個方便的解決方案來創建「編輯設置」鍵/值頁面。編輯鍵/值參數列表Formset

參數型號:

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

模板側,則顯示錶單集時,鍵和值被示出爲輸入。

我想找一種方便的方式來顯示形式鍵作爲只讀標籤和值作爲輸入。並且,當提交時,根據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> 

回答

1

如果你不希望值可編輯,不包括它在創建表單集時在fields

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 %} 
+0

感謝,易於實施和工作的解決方案。 用工作代碼編輯我的答案。 –