Я хотел бы удалить экземпляр модели, но только если у него нет другого экземпляра другого класса с внешним ключом, указывающим на него. Из документации 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 (), но я ищу более общее решение для любой данной модели.