我在Django项目中有许多包含外键和多对多(m2m)关系的模型。当我尝试使用manage.py中的sqlclear命令时,我收到错误:
ERROR: cannot drop table appname_tablename because other objects depend on it
有没有办法让Django将CASCADE添加到输出中,以便可以删除依赖表?
答案 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'))) #<-!
...