使用过滤器反向 ManyToMany 查找模型

Reverse ManyToMany lookup for model with filter

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

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

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)

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

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