Django:查询所有具有外键的项目

Dyl*_*ens 11 django

我有两个型号:

class A(models.Model):
    name = models.CharField(max_length=100, unique=True)

class B(models.Model):
    a = models.ForeignKey(A)
Run Code Online (Sandbox Code Playgroud)

在Django中,我如何选择具有指向它们的B类对象的类'A'的所有对象?例如,如果数据库包含类'A'的这三个条目:

A, named "one"
A, named "two"
A, named "three"
Run Code Online (Sandbox Code Playgroud)

B类的两个条目:

B, points to "two"
B, points to "three"
Run Code Online (Sandbox Code Playgroud)

我想选择A类"两"和"三".

kar*_*ikr 15

你可以这样做:

a_qs = A.objects.filter(b = b) 
Run Code Online (Sandbox Code Playgroud)

其中b是类的对象,B并且b=引用要查询反向关系的小写模型名称.

阅读更多关于跨越此处关系的查找.它介绍了如何对模型的ForeignKey属性进行反向查找

编辑:

如果要查找没有ForeignKey指向它们的任何对象的所有对象,可以使用exclude和__isnull

a_qs = A.objects.exclude(b__isnull = True) 
Run Code Online (Sandbox Code Playgroud)

  • 啊哈,编辑工作得很好!谢谢,Karthikr!但是,我应该指出的一件事是使用exclude和__isnull选择所有具有指向它们的ForeignKeys的"A"对象.使用False将选择未指向的项目. (4认同)
  • 这不应该是“b_set__isnull”吗?“my_name”的默认相关名称是“my_name_set”,因此除非您在“B”中写入:“a=models.ForeignKey(A, related_name='b')”,否则使用“b”作为向后关系将不起作用。 (2认同)