使用过滤器对模型进行反向多对多查找

时间:2021-02-21 01:04:35

标签: django django-models django-queryset

我正在尝试使用带有过滤、values_list 和 order_by 的 Django ManyToMany 反向查找,但无法弄清楚。

这是我的模型(简化版):

class Project(Model):
    users = ManyToManyField(User, verbose_name="Users", related_name="project_users", blank=True)
    
    files = ManyToManyField(FileInfo, verbose_name="Files", related_name="project_files",)


class FilInfo(Model):    
    # Name
    name = CharField(_("Name"), max_length=300, blank=False)
    
    # Description
    description = TextField(
        _("Description"),
        max_length=4096,
        validators=[MaxLengthValidator(4096)],
    )    

# User model is a standard Django user model     

我正在尝试为 self.request.user 是 project_user 的所有项目获取所有不同的 FileInfo.name

这是我作为占位符的明显错误尝试: // 甚至不编译 :(

FileInfo.objects.values_list('name').filter(Q(pk = project__files__pk) & Q(project__users__pk=self.request.user.id)).distinct().order_by("-" + order_by)

1 个答案:

答案 0 :(得分:1)

FileInfo 对象中,您可以通过 project_files 相关名称访问项目,然后为用户过滤 users 字段。

FileInfo.objects.filter(
    project_files__users=self.request.user
).values_list('name').distinct().order_by("-" + order_by)