简体   繁体   English

如何使Django sqlclear输出CASCADE用于依赖关系

[英]How to make Django sqlclear output CASCADE for dependent relationships

I have a number of models containing foreign keys and many to many (m2m) relationships in a Django project. 我在Django项目中有许多包含外键和多对多(m2m)关系的模型。 When I try and use the sqlclear command from manage.py i receive the error: 当我尝试使用来自manage.py的sqlclear命令时,收到错误消息:

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

Is there a way to have Django add CASCADE to the output so dependent tables can be dropped? 有没有办法让Django将CASCADE添加到输出中,以便可以删除依赖表?

Why not use sed ? 为什么不使用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;

You can execute resulting DROP TABLE script several times until all tables will be dropped. 您可以多次执行生成的DROP TABLE脚本,直到所有表都将被删除。 Is this a problem for you? 这对您有问题吗?

EDITED 已编辑

You can overwrite sql_delete in django.core.management.sql with: 您可以使用以下命令覆盖django.core.management.sql中的 sql_delete

...
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')))    #<-!
...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM