【问题标题】:django: How to use generic view with two modelsdjango:如何在两个模型中使用通用视图
【发布时间】:2013-02-27 17:53:12
【问题描述】:

我有两个模型,分别称为 customerbuilding。如何使用这两个模型在一个模板中使用基于类的通用视图进行通用查看。

这是我的 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 的业余爱好者,并且仍然是一个很好的方法。如果我问一个菜鸟问题,请原谅我。已签入此How can I pass two models to a class based generic view,但仍为空白。非常感谢您的帮助。

【问题讨论】:

    标签: django django-models django-templates django-views


    【解决方案1】:

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

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

    然后你可以像这样在你的模板中调用它

    {{ building.name }}
    

    如果你想在一个表单中使用它,同时正确地编辑两个模型会更加棘手。

    a great SO post explaining why this is

    【讨论】:

    • 感谢@limelights 的回复。抱歉再次问我必须写 (name="Monkey") 还是??对不起,现在有点困惑......
    • 不,这只是一个例子,但你必须过滤一些东西,或者如果你想要所有建筑物,你会做building.objects.all() - 我更新了我的答案
    • 你好@limelights。我已经添加了您的建议,但我仍然遇到同样的问题。它不会给我正确的输出。我是否也必须更改模型 = 客户和模型 = 建筑??
    • 您正试图通过表单访问它,对吗?正如我所说,在你的情况下这非常棘手。我相信你不能使用UpdateView
    • 是的,这是正确的...@limelights...:(如果我不能使用 Updateview 使用它,有什么办法可以让我改变一些东西,这样我就可以实现输出我想要什么??你有什么建议吗?再次感谢..
    猜你喜欢
    • 2020-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多