首页 > 解决方案 > How to bind more than one model to a template

问题描述

I'm trying to feed a select tag with options recovered from a database. The problem is, I'm totally beginner with Django and don't even know how to search for this.

I'm using generic view and as far as I know, the template is fed by a model bound to a context_object, default named as object_list, but you can change it in the context_object_name variable. But my companies_object is not feeding the template.

        <tbody>
            {% for project in projects %}
                <tr>
                    <td>
                      {{ project.title }}
                    </td>
                 [...]

        <select>
            {% for company in companies %}
            <option value="{{company.id}}">{{company.name}}</option>
            {% endfor %}
        </select>
class ProjectsView(LoginRequiredMixin, ListView):
    model = Project
    context_object_name = 'projects'
    template_name = 'projects/projects.html'

    def select_company(self):
        companies = Company.objects.all()
        return 1 #return selected company

    def get_projects(self):
        seek_in_database()
        return projects

I expect to know how to show two different objects in the same template, the projects, which is already working, and the companies object. I didn't figure it out yet how the template is getting the project's data, I suspect of model = Projects and context_object_name.

I know that it is begginer level, and I don't expect someone to write a complete guide, I'll be very happy with some instruction of what subject to look.

标签: django

解决方案


这是我如何做的一个例子:

class CompanyListView(ListView):
    model = Company
    context_object_name = 'companies'
    template_name = 'core/company/listCompanies.html'

    queryset = Company.objects.get_main_companies()

    def get_context_data(self, **kwargs):
        context = super(CompanyListView, self).get_context_data(**kwargs)
        context.update({
            'company_abbr': self.request.session.get('company_abbr'),
            'page_title': 'Manage Companies',
        })
        return context

因此,在 get_context_data 中,您可以根据需要添加任意数量的数据。


推荐阅读