我正在尝试按分配的用户组筛选任务(活动列表(中的活动。
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/