Django查询关系行为
好的,有没有一种方法可以过滤对象,这样你就只能得到有关联记录的记录。也许是正确的加入 基本上,我只想从A中选择B有外键的记录,同时在B上使用WHERE子句。我是否让它听起来比实际更复杂?我不需要B的记录,只需要A;也许是子查询Django查询关系行为,django,django-queryset,Django,Django Queryset,好的,有没有一种方法可以过滤对象,这样你就只能得到有关联记录的记录。也许是正确的加入 基本上,我只想从A中选择B有外键的记录,同时在B上使用WHERE子句。我是否让它听起来比实际更复杂?我不需要B的记录,只需要A;也许是子查询 我对Django的查询比较陌生,我只做了一些简单的事情 你的问题有点含糊,但如果我理解正确,它会是这样的: class A(models.Model): pass class B(models.Model): a = models.ForeignKey(
我对Django的查询比较陌生,我只做了一些简单的事情 你的问题有点含糊,但如果我理解正确,它会是这样的:
class A(models.Model):
pass
class B(models.Model):
a = models.ForeignKey(A)
some_field = models.IntegerField()
a.filter(b__some_field=5).distinct()
这个
连接了两个表,并在b
的一些字段上进行筛选。然后distinct()
确保只返回唯一的a
s。请参阅上的文档。我的解决方案比我最初认为的简单得多。我不知道你能如此轻松地筛选相关模型。以下是我最终得到的结果:
class A(models.Model):
pass
class B(models.Model):
a = models.ForeignKey(A)
location = models.ForeignKey(Location)
a.filter(b__location=request.user.profile.location)
你能给出一个具体的例子吗?过滤对象a以便它只获取与B有关的记录,B是外键为a的模型。有两种方法可以做到这一点(尽管我不能准确地回忆第二种方法)。最简单的方法是执行A.objects.filter(id\u in=B.objects.filter(您的自定义过滤器).values\u list('A',flat=True))。它是一种子查询。我将试着回忆第二种方式。