首页 > 解决方案 > 在django中过滤多对多字段的外键?

问题描述

我有一组看起来像这样的 django 模型:

class Profile(models.Model):
    attributes

class Package(AuditBaseModel):
    name = models.CharField(max_length=128)
    active = models.BooleanField(default=True)

class ProfilePackage(AuditBaseModel):
    profile = models.ForeignKey(Profile, related_name="profile_packages", on_delete=models.CASCADE)
    package = models.ForeignKey(Package, related_name="profile_packages", on_delete=models.PROTECT)
    active = models.BooleanField(default=True)

我需要的是从配置文件中过滤包名称的方法。我知道我可以做类似的事情

ProfilePackage.objects.filter(active=True, package__name="Professional").select_related("profile")

这将给我一个包含该包的配置文件的查询集,但我需要将它与其他过滤器结合起来,我希望配置文件模型是顶层。

标签: pythondjangodjango-querysetintersection

解决方案


查看您的模型,这应该相当容易。

Profile.objects.filter(profile_packages__active=True, profile_packages__package__name="Professional")

推荐阅读