2011-03-30 76 views
3

我正在嘗試在Django中編寫一個簡單的CRM應用程序;部分是作爲學習練習,部分作爲內部使用。我應該修改/擴展管理界面,還是編寫我自己的CRUD視圖/模板?

我的模式稍微複雜一些,因爲它只有一個Contact模型(包括家庭電話,工作電話,家庭電子郵件等),我已經剝離了Cntact模型以及Phone模型,Email模型等。,一個ForeignKey指向一個聯繫人。關鍵是讓聯繫人擁有任意數量的電話號碼,電子郵件地址等。很簡單,對吧?

我有一些工作視圖和用於顯示數據的模板 - 沒有問題。在admin.py中只有非常少量的戳記,我有一個這樣的......設置了8個不同的TabularInline,並且管理界面用於創建和編輯數據......但它的可用性卻很醜陋,當然也沒有任何權限或任何概念。我也不是一個擁有完全不同的界面來顯示和搜索數據的粉絲,而不是編輯和添加聯繫人的粉絲......我希望儘可能多的內聯,以便我可以搜索名字,查看記錄,點擊「添加註釋」,彈出一個表單,填寫詳細信息,點擊提交,完成後,所有的AJAXy善良,所以沒有頁面重新加載。

問題:我是否應該修改管理界面以嘗試使其適用於面向用戶的應用程序?如果是這樣,任何人都可以指向我一個很好的指南或例子,其中有人已經真正改變了管理界面以使其適用於面向用戶的CRUD操作?

或者我應該繼續寫下我自己的CRUD視圖嗎?如果是這樣,任何人都可以指向我一個很好的指南或例子,其中有人編寫了自定義CRUD視圖,可以與很多ForeignKeys和inline一起工作?理想情況下,我需要一個表單,顯示單個聯繫人,所有電子郵件記錄,以及添加新電子郵件記錄的空白表單,以及添加更多空白表單的按鈕,以及電話記錄和空白表單等等。所有8個相關模型。

(或者,我想這一切都錯了嗎?任何意見讚賞。)

回答

4

對於我們的內聯網,我們使用的ModelAdmin子類(沒有安裝在通過admin.site.register管理界面)對於大多數我們的C (R)UD視圖。通過爲視圖使用自定義模板,它看起來不像Django admin。非常方便的是,它已經處理了我們所有的驗證/保存。一般來說,我發現admin-「hacking」對於快速編寫C(R)UD視圖非常有用,並且通常對ModelAdmin子類進行相對較小的更改,您可以使其適用於您的用例。

所以我會投票使用ModelAdmin,但不是你在管理中使用的那個,掛鉤一個不同的模板,並拿出一些奇特的CSS。

+0

謝謝你;正是我在尋找的那種答案。不幸的是,我不知道如何去做這件事。 :)文件有點輕,我想我應該只是通過編碼... – 2011-04-01 02:38:51

+0

沒有關於這樣做的文檔,因爲它不完全是它的目的。 – ojii 2011-04-01 08:11:47

+0

+1我做同樣的事情將管理類掛鉤到我自己的url映射方案中。 Django的管理員內置了很多內容 - 驗證,級聯刪除,身份驗證等等。我會盡量記得在週一重新開始工作時發佈一些方法和代碼片段。 – JCotton 2011-04-02 04:39:20

1

我成功地在管理員之上創建了一個軟件。 管理員掛鉤(這些天)允許非常細粒度的自定義,即通常您只需要觸摸想要更改的內容。

的變化可以從一個簡單的化妝調整去完成換出:

如果你提供的模板/管理/ base.html文件您的管理網站可以看看你喜歡的任何方式。當然,頂部的導航欄可以包含一些自己的觀點鏈接。注意不要在鏈接中硬編碼URL,始終反向。

您可以重載ModelAdmin的「change_view」,「changelist_view」等,並將它們交換爲您自己的視圖。例如,我用默認的更改列表和簡單的過濾替換爲允許構建動態查詢的搜索界面,由用戶自定義結果列以及加載/保存這些搜索。這並不影響該ModelAdmin的其他任何觀點。

重載ModelAdmin的「get_urls()」讓我們重新包裝現有的管理網址以轉到您自己的視圖。我爲後者的一個模型,我想簡單的添加屏幕被完全定製的嚮導(僅靠ModelForm)取代。

不要忘記最簡單的方法,關於您的「AJAXy善良」:只需在您的ModelAdmin的Meta中定義「css」和「js」。想要從底部移動一個內聯坐在第三和第四個字段之間,並且這不可能通過參數? jQuery中的一行代碼。

查看「django-grappelli」,瞭解如何改進管理外觀的示例。

你是什麼意思,「當然沒有權限或任何東西的概念」?

相關問題