Django多对一关系过滤器集

时间:2015-05-26 22:52:53

标签: python django django-orm

我有几个模型设置如下:

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()

希望这会让每个包含位置A和位置B的内容的小组都回到我身边。任何建议或朝正确方向推进都会非常有帮助!

感谢。

1 个答案:

答案 0 :(得分:4)

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

  

要引用“反向”关系,只需使用模型的小写名称。

<强> 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()
        Order.objects.create(location="here", group=g)
        return Group.objects.filter(thing__location__in=["here","there"])

Working code example on github