2014-03-19 70 views
1

例如,我想要一個頁面,它可以讓用戶爲不同類別的商品添加數據。如何利用django通用視圖?

像:

型號:類別是項目

Category1(detail url): 
    Item 1(detail url): 
     Date(textbox), Amount(textbox), Price(textbox) 
    Item 2: 
     ... 
Category2: 
... 
Save button, add more button, etc... 

的外鍵由於這是一個例子,我有什麼事那些在一個頁面中的所有顯示器。

我不介意用正常的函數寫它們,但是我不知道我是否可以利用這些意見,因爲如果它們被大量引入和開發,它們可能會很強大。那麼爲什麼不使用它呢?

任何人都可以告訴我如何使用它們的技巧,或者我們不應該使用它們,如果我們想要更多的功能?

回答

1

Django的通用視圖涵蓋了很多常見用例。例如:

  • CreateView的 - 用於更新模型的現有實例
  • DeleteView的視圖 - - 用於刪除模型的現有實例的視圖用於創建模型的實例
  • 的UpdateView的圖
  • 的DetailView - 用於顯示模型
  • 的ListView的exsting實例的詳細信息視圖 - 顯示模型的實例的列表視圖

如果你需要他們,還有更多的東西,他們涵蓋了你可能需要的大部分觀點。您也可以很容易地擴展它們以滿足您的需求。作爲一般的經驗法則,它們會產生如此巨大的差異,以至於您可以多快建立一些內容,我建議默認使用它們,並且只在完全有必要時才切換到編寫自己的視圖。如果你還沒有學到這些知識,我認爲這樣做對你的時間來說是非常好的投資 - 你會花很快的時間來彌補。對於很多視圖類型,這只是指定模型,設置網址和模板的情況,並且您已完成。

如果您需要傳遞其他數據,則可以擴展有問題的通用視圖並覆蓋get_context_data()方法。如果同樣需要應用於幾個不同的通用視圖,則可以創建一個包含該方法的混入,並將其包含在該通用視圖中。

對於包含窗體的視圖,如Create View和UpdateView,正如Drewness所說,您可以通過ModelForm實例來告訴它使用哪種形式,並且該窗體本身可以被重寫,所以您仍然有很多控制表單將做什麼。例如,您可以定義如下形式:

from django.forms import ModelForm 

class CategoryForm(ModelForm): 
    exclude = ['date_created'] 

而下面的視圖

from django.views.generic.edit import CreateView 

class CategoryCreateView(CreateView): 
    model = Category 
    form_class = CategoryForm 

Django的教程covers generic views pretty well

+0

我閱讀了這些文章,但也許​​我仍然需要一個提示。就像在這個例子中,我們可以使用列表視圖來列出所有類別,似乎我們也可以使用表單視圖來填充數據等。我的意思是我們如何將這些視圖結合在一起?遺產? – dspjm

+0

你的意思是「將這些觀點結合在一起?」 –

+0

如果您引用了用於創建和編輯數據的視圖,那麼您可以爲數據指定一個表單。您可以爲視圖創建一個表單並將其傳遞給通用視圖,並且將使用該表單。該表單可以是一個ModelForm,它直接從模型 –

1

您可以使用Django的ModelFormFormView

然後,您的模型中的所有字段將在您的表單和表單視圖中可用。你也應該看看mixins。 Mixins允許您使用基於類的視圖的組合。

最後,如果要在視圖中使用多個表單(模型),可以使用FormSet