2013-03-12 30 views
1

我有兩種模式,分別稱爲customerbuilding。我怎樣才能使用這兩個模型來使用基於類的通用視圖在一個模板中進行統一查看。django:如何使用兩種模式的通用視圖

這是我urls.py查看我的客戶

urlpatterns = patterns('', 
url(r'^customer/', customerView.as_view(), name= "customer_view"), 
) 

這裏是我的view.py客戶

class customerView(UpdateView): 
    template_name="customer.html" 
    model = customer 
    form_class = customerForm 

    def get_context_data(self, **kwargs): 
     context = super(customerView, self).get_context_data(**kwargs) 
     context['pk'] = 1 
     context['numberOfObjects'] = customer.objects.all().count() 
     return context 

    def get_object(self, queryset = None): 
     try: 
      obj = customer.objects.get(id = 1) 
     except: 
      obj = customer.objects.create(id = 1) 
     return obj 

    def form_valid(self, form): 

     form.save() 
     return HttpResponseRedirect(reverse("customer_view", kwargs={'pk': self.kwargs['pk']})) 

下面是一些用於customer.html代碼同時查看customerbuilding

<form action="" method="post"> 
{% csrf_token %} 

{{ form.id }} 
    <div class="text_label" >FIRST NAME</div> 
    <div class="text_input">{{ form.FIRST_NAME }}</div>  
    <div class="text_label" >LAST NAME</div> 
    <div class="text_input">{{ form.LAST_NAME }}</div>  

    <div class="text_label" >BUILDING USE</div> 
    <div class="text_input3">{{ form.BUILDING_USE }}</div></td>  
    <div class="text_label" >BUILDING FLOORSPACE</div> 
    <div class="text_input3">{{ form.BUILDING_FLOORSPACE }}</div></td>  
    <div class="text_label">BUILDING YEAR</div> 
    <div class="text_input3" >{{ form.BUILDING_YEAR }}</div></td></tr> 

rest of the code....//the first part is from the class customer and the second part is from the class building. 

我的問題是我可以通用查看類客戶,但不是班級建設。我該如何實現這一目標...我仍然是django的業餘愛好者,並且仍然是一個非常好的方式。請原諒我,如果我問一個noob問題。請檢查此How can I pass two models to a class based generic view但仍然空白。非常感謝你的幫助。

回答

0

在您的get_context_data()中,您可以添加新對象。

context['building'] = building.objects.get(name="Building name") 

,那麼你可以把它在你的模板這樣

{{ building.name }} 

如果你想在表單中使用它,它會證明很多小技巧就在同一時間正確地編輯兩種車型。

還有a great SO post explaining why this is

+0

感謝@limelights的回覆。抱歉再次問我是否必須寫(姓名=「猴子」)或??對不起有點混淆現在... – noobes 2013-03-12 09:38:31

+1

不,這只是一個例子,但你必須篩選的東西或如果你想要所有的建築物你做'building.objects.all()' - 我更新了我的答案 – 2013-03-12 09:39:43

+0

是的非常感謝你@ limelights..I現在試試...:D – noobes 2013-03-12 09:40:25