如何通过另一个模型上的外键查询 Django 查询集?

时间:2021-07-24 02:21:16

标签: django django-models django-queryset

我的项目中有以下模型

class Case(models.Model):
    ...

class File(models.Model):
    class StatusType(models.TextChoices):
        ACTIVE = "ACTIVE", _("ACTIVE")
        DELETED = "DELETED", _("DELETED")

    case = models.ForeignKey(Case, on_delete=models.CASCADE, null=True)
    user = models.ForeignKey(User, null=True, on_delete=models.CASCADE)
    status = models.CharField(
        max_length=255,
        choices=StatusType.choices,
        default=StatusType.ACTIVE,
    )

基本上,在我的一个观点中,我想通过 File 模型获取满足以下条件的所有情况的列表:

  • user = request.user
  • status = "ACTIVE"

我怎样才能以简单的方式做到这一点?我可以先查询所有文件,然后遍历它们并将案例添加到列表中。这是解决此问题的最佳方法吗?

在此先感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

试试这个:

@login_required
def my_view(request):
    active_file = File.objects.filter(status=StatusType.ACTIVE, user=request.user)

    cases = Case.objects.filter(file__in=active_file)

    context = {'case': cases}

    return render(request, 'test.html', context=context)

答案 1 :(得分:3)

另一种与@anamul 的答案相同的方法

Case.objects.filter(
    file__user=request.user.id, 
    file__status=StatusType.ACTIVE,
)

您没有为 File 中的案例 FK 指定相关名称,因此此处的 file__ 可能需要更改为 file_set__