通过外键查询模型以接收另一个外键中的数据?

时间:2021-03-17 20:18:58

标签: django django-models django-queryset

我无法通过我构建的表运行查询,该表基本上是一个链接类型表来链接 CompanyPackage

class CompanyPackageLink(models.Model):
    company = models.ForeignKey('business.Company', related_name='company_packages')
    package = models.ForeignKey('business.Package', related_name='packages')

我正在尝试通过 CompanyPackage 查询 company 表,然后检索与该查询关联的所有包。

我有类似的东西...

company = Company.objects.get(employee=self.request.user)
company_packages = CompanyPackageLink.objects.filter(company=company).select_related('package')

现在这将返回一个正确的 quesyset,但它返回 CompanyPackage 实例。

<QuerySet [<CompanyPackageLink: companyA: PackageA>, <CompanyPackageLink: CompanyB: PackageB>]>

我希望我的查询返回实际的 Package 模型实例,我可以在其中检索名称、价格等。

所以我希望返回的查询集实际返回这个..

<QuerySet [<Package: $100.00>, <Package: $200.00>]>

感谢任何帮助!

1 个答案:

答案 0 :(得分:4)

您可以通过以下方式轻松查询:

Package.objects.filter(packages__company=company)

可能有两个(或更多)CompanyPackageLink 具有相同的 PackageCompany。在这种情况下,QuerySet 将多次包含该 Package。您可以通过使用 .distinct() [Django-doc]:

来避免这种情况
Package.objects.filter(packages__company=company).distinct()