Django ORM с Postgres: неожиданно удаленные строки - Ошибка? - PullRequest
1 голос
/ 20 сентября 2010

У меня проблема с тем, что объекты были неожиданно удалены и создали минимальный пример. Я не знаю, является ли это ошибкой или совершенной ошибкой.

Модели примерно такие:

class A(models.Model):
    related = models.ForeignKey('C', blank = True, null = True)

class B(models.Model):
    title = models.CharField(max_length = 255, blank = True, null = True)

class C(models.Model):
    b = models.OneToOneField('B', blank = True, null = True, related_name = 'c')

Это тестовый пример:

a1 = A()
a1.save()

b1= B()
b1.save()

c1 = C()
c1.b = b1
c1.save()

b1 = B.objects.all()[0]
b1.c.delete()
b1.delete()

self.failUnlessEqual(A.objects.count(),1)

Я удалил b1.c перед удалением b1. При удалении b1.c, b1.c имеет значение NULL. Кажется, что тогда все записи A были удалены, где A.related равен NULL.

Это ошибка? Я действительно не ожидал, что все записи всех таблиц, которые имеют нулевую ссылку на модель С., будут удалены.

Я использую Postgres 8.4 и psycopg2 в качестве базы данных БД.

С наилучшими пожеланиями!

1 Ответ

1 голос
/ 20 сентября 2010

Django реализует внешние ключи по умолчанию с «ON DELETE CASCADE», что означает, что записи, указывающие на удаленную запись, также будут удалены.Это не ошибка, он специально разработан таким образом.

Обходные пути обсуждаются в другом месте в stackoverflow .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...