使用 Django ORM 可以通过多少种方式获取 ManyToMany 字段数据

In how many ways I can get ManyToMany field data using Django ORM

假设我有一个名为 AB 的模型。在模型 B 中,我有 ManyToMany 字段来建模 A 所以我可以使用模型 B

从模型 A 中获取数据的方式有多少
class A(models.Model):
    name= models.CharField(...)

class B(models.Model):
    a= models.ManyToManyField(A)

最直接的两种方式是访问B的模型对象的a管理器,所以:

<i>model_b_object</i>.<b>a</b>.all()

另一种检索相关对象的方法是过滤 B 模型,因此:

A.objects.filter(<b>b=<i>model_b_object</i></b>)

如果您定义了一个 through 模型,例如:

class A(models.Model):
    name= models.CharField(...)

class B(models.Model):
    a= models.ManyToManyField(
        A
        <b>through='C'</b>
    )

class C(models.Model):
    a = models.ForeignKey(A, on_delete=models.CASCADE)
    b = models.ForeignKey(B, on_delete=models.CASCADE)

那么您也可以通过以下方式访问:

A.models.objects.filter(<b>c__b=<i>model_b_object</i></b>)

但这只会使 ORM 调用更复杂,可读性更差。