Django按用户组过滤外键关系



我正在尝试按分配的用户组筛选任务(活动列表(中的活动。

TaskActivityModel.objects.filter(activity__workCenter=request.user.groups)

这给了我一个TypeError: Field 'id' expected a number

当我将滤波器参数修改为CCD_ 2时,我得到了CCD_。我错过了什么?

每个活动都分配了一个组。用户可以是多个组中的一个。这可能是的问题吗

任务活动模型

class TaskActivityModel(models.Model):
task = models.ForeignKey(TaskModel, on_delete=models.PROTECT)
activity = models.ForeignKey(ActivityModel, on_delete=models.PROTECT)
startTime = models.DateTimeField(default=timezone.now)
finishTime = models.DateTimeField(null=True)

活动模型

class ActivityModel(models.Model):
activityName = models.CharField(max_length=100)
description = models.CharField(max_length=200)
workCenter = models.ForeignKey(Group, on_delete=models.PROTECT)
history = HistoricalRecords()

所以这正是你所说的。由于该请求,用户可能处于多个组中。User.groups返回一个ManyRelatedManager。要获取用户组的所有id,您必须查询该管理器以获取所有对象。您可以通过以下方式执行此操作:request.user.groups.all()

此外,由于返回的值将是一个数组,您必须在ORM查询中使用__in,以便检查workCenter是否在用户组中。像这样:

TaskActivityModel.objects.filter(activity__workCenter__in=request.user.groups.all())

你可以在这里阅读更多关于Django的多对多关系:https://docs.djangoproject.com/en/3.1/topics/db/examples/many_to_many/

相关内容

  • 没有找到相关文章

最新更新