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"])
我有几个模型设置如下:
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"])