2015-04-06 2 views
3

У меня есть две таблицы:Отбрасывание внешнего ключа в Django

class Foo(models.Model): 
    pass 

class Bar(models.Model): 
    foobar = models.ForeignKey(Foo, unique=True) 
    barfoo = models.ForeignKey(Foo, unique=True) 

Валидация гарантирует, что никогда не Foo, что является одновременно foobar и barfoo. Мне нужно удалить модель Bar и все Foo s, которые являются barfoo s. Мой подход состоит в том, чтобы удалить ограничение внешнего ключа с Bar.barfoo, запустить некоторый SQL, чтобы удалить все Foo s, которые являются barfoo, а затем удалить модель. Тем не менее, я не могу найти что-либо в django docs для переноса для динамически созданных ограничений внешнего ключа Django. Идеи?

+0

Не получив ответа, я применил обходное решение, скопировав поверх foobar_id во временное целое поле, а затем полностью удалив поле внешнего ключа. Было бы неплохо иметь более прямое решение. – astex

ответ

0

Создайте миграцию, которая уменьшает «foobar» и изменяет «barfoo», добавляя поведение CASCADE DELETION. Запустите эту миграцию, удалите все объекты Bar в базе данных, затем, наконец, удалите модель бара из файла модели и создайте новую миграцию.

Убедитесь, что у вас нет общих ключей на вашей модели (или вы получите устаревшие данные в таблице django_contenttypes).

Все.