【问题标题】: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