在Django中过滤嵌套的外键

时间:2019-12-21 08:48:42

标签: django

我正在创建一个Scrum板应用程序。

一个组织可以有多个董事会,一个董事会可以有许多任务。

我正在尝试创建一个视图,其中包含一个组织所在的所有任务。

为了简化:

各种应用的models.py

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    organization = models.ForeignKey(Organization, on_delete=models.CASCADE)

class Board(models.Model):
    name = models.CharField(max_length=100)
    organization = models.ForeignKey(Organization, on_delete=models.CASCADE)

class Organization(models.Model):
    name = models.CharField(max_length=100)


class Task(models.Model):
    name = models.CharField(max_length=100)
    board = models.ForeignKey(Board, on_delete=models.CASCADE)

views.py

def home(request):
    tasks = Task.objects.filter(**NOT SURE HOW TO FILTER**)

    context = {
        'tasks': tasks,
    }
    return render(request, 'tasks/home.html', context)

当前,我正在**NOT SURE HOW TO FILTER**中尝试board.organization=request.user.profile.organization

但是,出现错误SyntaxError: expression cannot contain assignment, perhaps you meant "=="?

这似乎是由于board.organization引起的。一方面,我需要通过任务委员会来参考组织。另一方面,Django不接受这一点。

我该如何克服这个问题?

1 个答案:

答案 0 :(得分:1)

尝试一下

tasks = Task.objects.filter(board__organization=request.user.profile.organization)

注意:您应该使用@login_required(...)装饰器来确保用户身份验证

参考文献

  1. Django ORM making queries
  2. Django orm: Lookups that span relationships