Как сделать Django sqlclear выводом CASCADE для зависимых отношений - PullRequest
1 голос
/ 06 марта 2012

У меня есть несколько моделей, содержащих внешние ключи и отношения многие ко многим (м2м) в проекте Django.Когда я пытаюсь использовать команду sqlclear из manage.py, я получаю сообщение об ошибке:

ERROR:  cannot drop table appname_tablename because other objects depend on it

Есть ли способ заставить Django добавить CASCADE в вывод, чтобы можно было удалить зависимые таблицы?

Ответы [ 2 ]

7 голосов
/ 06 марта 2012

Почему бы не использовать sed?

>>> ./manage.py sqlclear testapp | sed 's/";/" CASCADE;/' 
BEGIN;
DROP TABLE "testapp_person" CASCADE;
DROP TABLE "testapp_post" CASCADE;
DROP TABLE "testapp_userprofile" CASCADE;
DROP TABLE "testapp_school" CASCADE;
DROP TABLE "testapp_events" CASCADE;
DROP TABLE "testapp_uploadmodel" CASCADE;
COMMIT;
2 голосов
/ 06 марта 2012

Вы можете выполнить полученный скрипт DROP TABLE несколько раз, пока все таблицы не будут удалены.Это проблема для вас?

EDITED

Вы можете перезаписать sql_delete в django.core.management.sql с:

...
if cursor and table_name_converter(model._meta.db_table) in table_names: 
    # Drop the table now 
    output.append('%s %s %s;' % (style.SQL_KEYWORD('DROP TABLE IF EXISTS'), #<-!
                                 style.SQL_TABLE(qn(model._meta.db_table)),
                                 style.SQL_KEYWORD('CASCADE')))    #<-!
...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...