使用过滤器反向 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)
我正在尝试使用带过滤的 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)