2013-03-12 55 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