簡體   English   中英

如何在Django中創建帶有鏈接以更改模型實例的布爾值的表?

[英]How to create a table with links to change boolean values of a model instance in Django?

我有一個ListView,可以在多個表中顯示客戶訂單。 有一張表用於發送的訂單(尚未標記為“已接收”),一張表用於“已接收”訂單,一張用於“已處理”訂單,另一張用於“已交付”訂單。

此列表是人員列表,只有某些用戶可以訪問它。

我想做的是向每個訂單行添加一個按鈕(鏈接或表單的提交按鈕)。

例如,在已發送訂單(尚未“接收”)表中,應該有一個標有“標記為已接收”的按鈕(瑞典語中為“ Kvittera”),在“已接收”表中,該按鈕應顯示為“標記”加工”(瑞典語中的“ Klar”)等等。

這是我想要的樣子的圖片(對不起瑞典語):

圖片外觀

該模型具有三個布爾字段; order_receivedorder_processedorder_delivered 如果我在表中按下按鈕“Kvittera”的布爾值order_received應該從改變FalseTrue ,等等。 請注意,您永遠不能將其更改回False

我可以設置一個獲取URL的按鈕/鏈接,即http://example.com/orders/1/receive ,該按鈕/鏈接會運行一個完全執行此操作的視圖,然后再次重定向到列表頁面。 我對此有幾個問題:

  1. 您不應使用GET更改任何內容(使用POST,PUT或PATCH)
  2. 您不應該在網址中使用動詞(在這種情況下會收到)

我認為,解決此問題的一種方法是創建一種表單來發布數據。 但是以這種形式應該沒有字段,並且每個訂單行都需要一種形式。 該表單實際上只是一個提交按鈕。

同樣,每種形式都應綁定到所討論訂單的實例,並且應以編程方式僅將一個值從False更改為True。 我該怎么做? 我是想得太多還是完全偏離了軌道?

我認為您的解決方案走上正確的軌道,可以通過表單發布數據,並發送數據,例如:{'state':'received'}。 另外,我猜想Django Formsets可能對您的設計有用: https ://docs.djangoproject.com/en/1.9/topics/forms/formsets/。 如果您不使用Django 1.9,請更改文檔版本

另一個解決方案是使所有對象的id-s都具有dropdown / ChoiceField ,可以將order_received更改為True。 您可以為order_processedorder_delivered創建兩個下拉菜單。 然后,隱藏整個表單,並用一些JS修飾使按鈕更新表單值並發送表單。

但是,老實說,它不會重復使用內置的Django函數,因此我仍然建議說出@phiberjenz提到的內容並制作一個formset 如果您不想使用JS,則可以將訂單旁邊的按鈕用作提交按鈕,然后發送將由服務器端表單處理的帖子。

我最終創建了一個RedirectView,該實例在實例上調用了一個方法來更改訂單狀態。 這是通過GET請求調用的,但是非常簡單,根據https://docs.djangoproject.com/en/1.10/ref/class-based-views/base/ (在底部),示例完全顯示了這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM