Django查询指定ExternalService公司关联员工并在DetailView中展示的实现方法
解决方案
你现有代码存在两处需要修正的点:
get()方法仅能返回单个匹配的模型实例,查询符合条件的多条数据需要使用filter()方法- 调用模型查询时需先调用
objects管理器,同时查询条件需要匹配当前DetailView加载的公司实例(即self.object)
完整实现代码
class ExternalServiceDetailView(generic.DetailView): model = models.ExternalService form_class = forms.ExternalServiceForm def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) # 写法1:直接通过外键条件过滤 context['employees'] = models.ExternalServiceContact.objects.filter(company=self.object).order_by('name') # 写法2:通过Django默认生成的反向关联管理器查询,写法更简洁 # context['employees'] = self.object.externalservicecontact_set.all().order_by('name') return context
补充说明
如果你在定义ExternalServiceContact的company外键字段时,添加了related_name参数,比如company = models.ForeignKey(..., related_name="employees"),那反向查询可以直接写成self.object.employees.all().order_by('name'),代码可读性更高。
内容的提问来源于stack exchange,提问作者Reventlow
相关产品推荐
相关产品推荐

