2011-01-12 73 views
2

我在寫一個Django應用程序,其數據將來自不同來源,包括Excel電子表格。我已經編寫了一些代碼來從這些表單中進行初始導入,但我不希望在每次添加行時重新導入整個數據 - 而且我的客戶端不想自己重新輸入數據。將數據發佈到django管理員表單

一個可能的解決方案是添加一個簡單的textarea的表單,用戶可以複製粘貼電子表格的整行。然後,視圖可以拆分數據,預處理數據並將其發佈到相應對象的標準管理表單。

理想情況下,它的行爲將類似於用戶從此表單發佈的內容:如果數據驗證,則會創建對象,如果沒有,則會使用漂亮的紅色錯誤框重新顯示(管理員)表單。

所以我想我只是需要像

from django.shortcuts import redirect 
[...] 
return redirect(to, method=POST, *args) 

,但它似乎沒有用。

我也想過將數據作爲一個大的查詢字符串傳遞,如http://.../admin/app/object/add/?ID=1234&name=toto& ...但我的模型有許多字段,有一對多和多對多內聯,可能是長文本域等等,所以這個方法似乎比必要的更麻煩。

任何想法如何獲得像POST重定向的東西?或另一種解決這個問題的方法?

+0

讓用戶上傳csv文件如何? –

+0

有關https://stackoverflow.com/questions/4952222/build-a-two-stage-django-admin-form-for-adding-an-object – Miranda

回答

1

爲此,您應該遠離內置的管理界面。

創建自己ModelFormhttp://docs.djangoproject.com/en/dev/topics/forms/modelforms/

創建自己的觀點,即不驗證和POST功能。

這應該可能是一個兩步交易。

view_function_1

  • 如果方法是GET,呈現空形式。

  • 如果方法是POST,他們已經將一個值粘貼到文本框中並填入「其他」字段。

    解析文本框中的數據。

    對於空白字段,填寫文本框中缺失的值。

    將窗體的數據放入會話中。

    做一個重定向到URL,將移動到view_function_2

view_function_2

  • 如果方法是GET,獲取從會話表單數據,並 現在填寫的東西數據形式。

  • 如果方法是POST,驗證並保存結果。

    重定向到將向用戶顯示細節的頁面。

2

如果您已經編寫代碼特定於您的形式,爲什麼不創造,而不是試圖僞裝POST請求管理網站在相同功能的對象?

對我來說,使用默認的管理表單比使用現有的預處理視圖開始創建或更新對象聽起來更加困難。

我只是掛鉤您的預處理視圖經由get_urls方法您ModelAdmin定義,建立這可能是作爲

<form action="." method="post"> 
    <textarea name="data"></textarea> 
    <input type="submit" value="submit" /> 
</form> 

一樣簡單和手動處理在輸入表格數據的模板request.POST.get('data', '').split(',')(或你有什麼),並開始填充你的模型。

完成後,發送消息並重定向回您的應用程序視圖或更改列表視圖。

request.user.message_set.create(message="Finished populating X models") 
return http.HttpResponseRedirect('../') 
+0

我應該在哪裏「處理輸入表單請求中的數據。 POST.get('data','').split(',')「? – Brent81

+0

@ Brent81,在您看來,您已經迷上了管理員'get_urls'(鏈接到文章的文章) –

1

感謝您的快速和翔實的答案! @Yuji - 爲什麼我想使用管理員表單(或任何ModelForm,爲此)的原因主要是錯誤報告:數據可能包含錯誤和開發報告它的信息方式,本地化5種不同的語言對我來說似乎不太乾,因爲管理應用程序中已經存在非常好的東西。

@S。洛特 - 我曾經想過用ModelForm替換管理員,但是缺少的部分是將表單數據存儲在會話中。這似乎是一個非常有前途的方法。我會試試看,並回到這裏報告它是如何發生的。