Django查询关系行为

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(

好的,有没有一种方法可以过滤对象,这样你就只能得到有关联记录的记录。也许是正确的加入

基本上,我只想从A中选择B有外键的记录,同时在B上使用WHERE子句。我是否让它听起来比实际更复杂?我不需要B的记录,只需要A;也许是子查询


我对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))。它是一种子查询。我将试着回忆第二种方式。