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

时间:2018-12-07 17:00:42

标签: python django django-models django-queryset

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

例如,我有模型说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个查询中做到这一点。

1 个答案:

答案 0 :(得分:1)

您可以简单地做到:

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