2010-04-30 35 views
13

我想創建一個左邊有複選框的記錄列表....有點像Gmail中的收件箱。然後,如果用戶選擇部分或全部這些複選框,則可以更新選定的記錄(僅一個字段將被更新),可能通過點擊按鈕。使用Django一次更新多個記錄

我被困在如何做到這一點,雖然....想法?

顯示代碼

{% for issue in issues %} 
    <tr class="{% cycle 'row1' 'row2' %}"> 
     <td><input name="" type="checkbox" value="{{ issue.id }}" /></td> 
     <td>{{ issue.description }}</td> 
     <td>{{ issue.type }}</td> 
     <td>{{ issue.status }}</td> 
     <td>{{ issue.date_time_added|date:"d, M Y" }}</td> 
     <td>{{ issue.added_by }}</td> 
     <td>{{ issue.assigned_to }}</td> 
    </tr> 
{% endfor %} 

回答

26

Use the queryset update() method

id_list = list_of_ids_from_checkboxes 
MyModel.objects.filter(id__in=id_list).update(myattribute=True) 

您的顯示HTML缺少的複選框一個name值。如果您在所有複選框中只有一個名稱,那麼ID列表將被傳遞到一個POST變量中,您可以直接從request.POST(假設您將表單提交爲帖子,您應該是這樣):

id_list = request.POST.getlist('checkboxname') 
+0

我的主要問題是與複選框....抱歉,我忘了提及那一點....我如何傳遞選定的ID? – Stephen 2010-04-30 10:39:54

+0

你如何生成複選框? – 2010-04-30 11:52:29

+7

update()方法非常有用,只要確保您知道一個重要的警告即可!如果您在受影響的模型和/或pre_save/post_save信號處理程序上使用了自定義save()方法,則不會調用這些方法。 – 2010-04-30 12:20:13