我正在尝试使用带有过滤、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)
答案 0 :(得分:1)
从 FileInfo
对象中,您可以通过 project_files
相关名称访问项目,然后为用户过滤 users
字段。
FileInfo.objects.filter(
project_files__users=self.request.user
).values_list('name').distinct().order_by("-" + order_by)