如何使Django sqlclear输出CASCADE作为依赖关系

时间:2012-03-06 07:56:09

标签: python django

我在Django项目中有许多包含外键和多对多(m2m)关系的模型。当我尝试使用manage.py中的sqlclear命令时,我收到错误:

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

有没有办法让Django将CASCADE添加到输出中,以便可以删除依赖表?

2 个答案:

答案 0 :(得分:7)

为什么不使用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;

答案 1 :(得分:2)

您可以多次执行生成的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')))    #<-!
...