2012-05-15 60 views
0

我的模板的樣子:格式表單集的結果值不輸入

<form method="post" action=""> 
    {{ formset.management_form }} 
    {% for form in formset.forms %} 
    {{ form.contractor }} {{ form.date }} {{ form.value }} {{ form.comment }} {{ form.operation_type }} {{ form.category }} {{ form.account }} 
    {% endfor %} 
</form> 

,但結果卻讓改變所有領域的 - 但我想只有一個。

我認爲(請注意「.value」後的所有類別字段)解決問題,但不是。

<form method="post" action=""> 
    {{ formset.management_form }} 
    {% for form in formset.forms %} 
    {{ form.contractor.value }} {{ form.date.value }} {{ form.value.value }} {{ form.comment.value }} {{ form.operation_type.value }} {{ form.category }} {{ form.account.value }} 
    {% endfor %} 
</form> 

UPD: 相關視圖代碼

def detail(request, category_id): 
    from django.forms.models import modelformset_factory 
    OperationFormSet = modelformset_factory(Operation) 
    if request.method == "POST": 
    formset = OperationFormSet(request.POST, request.FILES, 
           queryset=Operation.objects.filter(category=category_id)) 
    if formset.is_valid(): 
     formset.save() 
     # Do something. 
    else: 
    formset = OperationFormSet(queryset=Operation.objects.filter(category=category_id)) 
    return render_to_response("reports/operation_list.html", { 
    "formset": formset, 
    }) 
+0

請發表相關的檢視代碼。 – patrickn

回答

0

您的問題是隻讀值不回傳給服務器,因此它只有收到一個字段的表單集應該失敗。

您希望顯示值並設置一個隱藏字段來存儲formset期望的數據。但我會推薦一種不同的方法...

最終,formset和form用於顯示html表單,而不是爲其他任何內容構建。您必須破解它才能顯示隱藏的小部件,確保用戶無法發佈任意數據等。所以,我會使用表單框架來僅顯示您的一個可編輯字段。

創建一個ModelForm僅具有一個可編輯字段

class MyModelForm(forms.ModelForm): 
    class Meta: 
     model = Operation 
     fields = ('category',) 

MyModelFormSet = modelformset_factory(Operation, form=MyModelForm) 

至於模板顯示值,ModelForms應該通過form.instance直接訪問它們的實例,所以你應該能夠做這樣的事情:

{% for form in formset %} 
    {{ form.instance.some_attribute }} 
    {{ form.category }} 
{% endfor %} 
+0

是的!就是這個!但現在我遇到了問題(「Key'form-0-id'not found in

+0

YES !!!我發現,忘記了{{form.id}} –