Django 多对一关系过滤器集

Django Many-To-One relationship filter set

我有几个模型设置如下:

Group(models.Model):
    name = models.TextField(max_length=255)

Thing(models.Model):
    location = models.TextField(max_length=255)
    group = models.ForeignKey(Group)

这只是说明关系的示例,请原谅任何语法错误。

我的问题是,如何找到具有一组特定位置的群组?我应该能够通过以下方式访问与群组关联的事物:

Group.thing_set

对吧?那么有什么方法可以根据 thing_set 中的项目进行过滤吗?我正在考虑类似的事情。

Group.objects.filter(thing_set.location in ["Location A", "Location B"]).all()

希望这对我来说 return 每个包含位置 A 和位置 B 的内容的组。任何建议或正确方向的推动都会非常有帮助!

谢谢。

根据 documentation 您必须使用模型名称作为查询运算符:

To refer to a “reverse” relationship, just use the lowercase name of the model.

models.py:

from django.db import models


class Group(models.Model):
   name = models.TextField(max_length=255)


class Thing(models.Model):
    location = models.TextField(max_length=255)
    group = models.ForeignKey(Group)

views.py:

from django.views.generic import ListView


class ReverseFK(ListView):
    model = Group

    def get_queryset(self):
        g = Group.objects.create(name="example")
        g.save()
        Thing.objects.create(location="here", group=g)
        return Group.objects.filter(thing__location__in=["here","there"])

Working code example on github