python - Django从第三级外键表中删除行

标签 python django django-models django-queryset

我想从模型或表中删除一行,其中我有要删除的行的foreign_key值和第一级表行的值。

例如,我的模型为 A、B、C,其中 B 指的是 A,C 指的是 B。

class A(models.Model):
    a = models.CharFeild(max_length=10)
    b = models.CharFeild(max_length=10)
    c = models.IntegerFeild(default=1)

class B(models.Model):
    b_col = models.CharFeild(max_length=10)
    a = models.ForeignKey(A, db_index=True)
    c_col = models.IntegerFeild(default=1)

class C(models.Model):
    c_col = models.CharFeild(max_length=10)
    b = models.ForeignKey(B, db_index=True)
    d_col = models.IntegerFeild(default=1)

A
id a b c
1  x y 100
2  y z 200
.  . . . 

B
id b_col a_id c_col
1    q    1    300
2    r    2    400
.    .    .     .

C
id c_col b_id d_col
1   i      1   500 
2   j      2   600
.   .      .    .

所以这里我有模型 C 列 d_col 值为 600 和模型 A 列“c”值=200,所以想从模型 C 中删除行,其中 c_col=200。 一种方法是,

a = A.objects.filter(c=200)
b = B.objects.filter(a_id=a.id)
c = C.objects.filter(b_id=b.id).delete()

有没有更好的方法可以在一个查询而不是 3 个查询中完成此操作。

最佳答案

您可以简单地执行以下操作:

C.objects.filter(b__a__c=200).delete()

关于python - Django从第三级外键表中删除行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53673911/

相关文章:

python - 有没有办法在 Tkinter 中拥有带有 Canvas 的 "default color"?

python - 使用 git 进行 pip 安装与仅克隆存储库有何不同?

django - 如何跳过django中的空get参数

python - 使用 PostgreSQL Arrayfield 作为类似 ManyToMany 的查找?

django - 从 ORM 加速数据库插入

python - python的代码文档

python - 如何在gcloud python客户端中按标签过滤

python - 使用支持向量回归进行预测

python - Django DB 表名,复数 double s

python - 在 ForeignKey 上设置 unique=True 与使用 OneToOneField 具有相同的效果