2016-05-17 121 views
0

我有一個(非常複雜的)HTML表單,它充滿了邏輯,它根據selectpickers中的不同選擇觸發,其字段與名稱中的對應字段名稱不完全相同Django模型,有時我擔心當涉及從HTML表單發送到Django模型的數據時,我需要添加一些邏輯。我意識到,我可能不會在Django中使用ModelForm來處理這個問題,並一直在尋找一些使用標準django.forms.Form將HTML表單映射到我的模型中的例子,但我並沒有真正發現。有人可以給我一些提示嗎?如何將HTML表單數據映射到Django模型

回答

0

您不能只將html表單映射到您的django模型中。您需要先創建一個模型表單,然後將其呈現在html中。

如果您想以某種方式將您的html表格映射到模型。首先在html中渲染你的ModelForm。創建django表單的html格式的精確副本,並在html中使用它。在你的視圖中捕捉它並像模型一樣處理它。但無論如何你必須創建ModelForm。

1

這聽起來好像你的html表單已經存在了,不知何故你想從表單中讀取POST數據。在沒有做出任何進一步假設的情況下,如何通過視圖輸出沒有django ModelForm或forms.Form輸出的html表單 - 只要表單操作位置通過路由映射到視圖 - 視圖就可以處理request.POST數據。如果您沒有使用django表單(基於模型或表單),並且您必須在視圖中進行自己的驗證,那麼django的所有表單驗證良好都會出來。表單數據驗證完成後,像這樣初始化模型對象:my_obj = ModelName(field_name1 = form_input_data1,field_name2 = form_input_data2,...)就是這樣。然後你可以做my_obj.save()。

現在,讓我們說,這不是很糟糕。您實際上正在使用forms.Form繼承來創建與模型沒有直接關係的django-istic表單類。現在,您可以使用表單相關的驗證clean_field和clean步驟等...以及所有內置字段類型內部驗證django自動執行。然後,當您讀取POST數據時 - 盡一切努力將表單字段(通過必要的轉換)映射到您嘗試構建的django模型對象,記住默認值和任何模型保存自定義分配發生。