【问题标题】:Multiple Model data to display in single template多个模型数据显示在单个模板中
【发布时间】:2023-10-07 19:09:01
【问题描述】:

我正在使用 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'

应仅显示该公司的用户

【问题讨论】:

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


    【解决方案1】:

    正如您提到的,您使用的是用户身份验证表,我假设您使用的是默认的 Django 用户模型。如果您使用连接到具有 OneToOne 关系的用户的模型来存储其他数据,那么您必须在那里存储公司信息。喜欢:

    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 %}
    

    【讨论】:

      【解决方案2】:

      用户和用户配置文件数据

      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
      

      【讨论】: