多个模型数据显示在单个模板中

时间:2018-12-24 11:08:49

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

我正在使用Django详细信息视图显示单个公司的详细信息。但是现在我想在该公司员工的用户的相同模板列表上显示。但是我正在使用用户身份验证表。如何显示多个视图,例如公司的详细信息视图和该公司的用户的列表视图。

class CompanyDetailView(LoginRequiredMixin, generic.DetailView):
    model = Company
    template_name = 'company/company-detail.html'
    context_object_name = 'companies'

class UserListView(LoginRequiredMixin, generic.ListView):
    model = User
    template_name = 'users/users.html'
    context_object_name = 'users'

只应显示该公司的用户

2 个答案:

答案 0 :(得分:1)

正如您提到的那样,您正在使用“用户验证表”,我假设您正在使用默认的Django用户模型。如果使用的模型通过OneToOne关系连接到User以存储其他数据,则必须在其中存储公司信息。喜欢:

class Profile(models.Model):
   user = models.OneToOneField(User)
   company = models.ForeignKey(Company)

如果这样做,则无需在视图中进行任何更改即可获取用户数据。您可以获取数据using related objects。在CompanyDetailView的模板中是这样的:

{% for profile in object.profile_set.all %}
   {{ profile.user }}
{% endfor %}

答案 1 :(得分:1)

用户和UserProfile数据

class CompanyUserDetailView(LoginRequiredMixin, generic.TemplateView):
    template_name = 'company/company-detail.html'

    def get_context_data(self, **kwargs):
        id_ = self.kwargs.get("pk")
        # print('printinh,,: ',id_)        
        context = super(CompanyUserDetailView, self).get_context_data(**kwargs)
        context['companydetail'] = Company.objects.get(pk=1)

        context['userlist'] = User.objects.filter(userprofile__user_company_id=id_)
        return context