【发布时间】:2010-12-27 04:46:10
【问题描述】:
我想删除模型的一个实例,但前提是它没有另一个类的任何其他实例且外键指向它。来自 Django 文档:
当 Django 删除一个对象时,它会模拟 SQL 约束 ON DELETE CASCADE 的行为——换句话说,任何具有指向要删除的对象的外键的对象都将被删除。
在一个给定的例子中:
class TestA(models.Model)
name = models.CharField()
class TestB(models.Model)
name = models.CharField()
TestAs = models.ManyToManyField(TestA)
# More classes with a ManyToMany relationship with TestA
# ........
我想要类似的东西:
tA = TestA(name="testA1")
tB = TestB(name="testB1")
tB.testAs.add(tA)
t = TestA.objects.get(name="testA1")
if is_not_foreignkey(t):
t.delete()
else:
print "Error, some instance is using this"
应该打印错误。我知道我可以检查外键集的特定实例,例如在本例中检查 t.TestB_set(),但我正在为任何给定模型寻找更通用的解决方案。
【问题讨论】:
标签: python django django-models