@@ -47,8 +47,8 @@ def _alter_column_set_null(self, table_name, column_name, is_null):
47
47
engine_ver = str (self .connection .connection .engine_version ).split ('.' )
48
48
if engine_ver and len (engine_ver ) > 0 and int (engine_ver [0 ]) >= 3 :
49
49
sql = """
50
- ALTER TABLE \" %(table_name)s\"
51
- ALTER \" %(column)s\"
50
+ ALTER TABLE \" %(table_name)s\"
51
+ ALTER \" %(column)s\"
52
52
%(null_flag)s NOT NULL
53
53
"""
54
54
null_flag = 'DROP' if is_null else 'SET'
@@ -237,6 +237,12 @@ def _get_field_indexes(self, model, field):
237
237
indexes = self .connection .introspection ._get_field_indexes (cursor , model ._meta .db_table , field .column )
238
238
return indexes
239
239
240
+ def _get_field_check_constraints (self , model , field ):
241
+ with self .connection .cursor () as cursor :
242
+ db_table = model ._meta .db_table
243
+ checks = self .connection .introspection ._get_check_constraints (cursor , db_table , field .column )
244
+ return checks
245
+
240
246
def remove_field (self , model , field ):
241
247
# If remove a AutoField, we need remove all related stuff
242
248
# if isinstance(field, AutoField):
@@ -252,6 +258,11 @@ def remove_field(self, model, field):
252
258
sql = self ._delete_constraint_sql (self .sql_delete_index , model , index_name )
253
259
self .execute (sql )
254
260
261
+ # If field has check constraint, then remove it first
262
+ for check_constraint_name in self ._get_field_check_constraints (model , field ):
263
+ sql = self ._delete_constraint_sql (self .sql_delete_constraint , model , check_constraint_name )
264
+ self .execute (sql )
265
+
255
266
super (DatabaseSchemaEditor , self ).remove_field (model , field )
256
267
257
268
def _alter_column_type_sql (self , table , old_field , new_field , new_type ):
@@ -875,4 +886,4 @@ def execute(self, sql, params=[]):
875
886
except Exception as e :
876
887
raise e
877
888
else :
878
- super (DatabaseSchemaEditor , self ).execute (sql , params )
889
+ super (DatabaseSchemaEditor , self ).execute (sql , params )
0 commit comments