Mysql 不允许为多个模型创建对象

Mysql 不允许为多个模型创建对象,mysql,django,django-models,Mysql,Django,Django Models,我正在进行数据库迁移,需要确保(暂时)没有为某些表创建新项 我将如何执行以下操作: class Table1: ... def save(self, *args, **kwargs): if not self.pk: raise super(Table1, self).save(*args, **kwargs) 对这五个表执行上述模式: - Table1 - Table2 - Table3 - Table4 - T

我正在进行数据库迁移,需要确保(暂时)没有为某些表创建新项

我将如何执行以下操作:

class Table1:
    ...

   def save(self, *args, **kwargs):
       if not self.pk:
           raise
    super(Table1, self).save(*args, **kwargs)
对这五个表执行上述模式:

  - Table1
  - Table2
  - Table3
  - Table4
  - Table5

我可以在信号或其他东西中定义它以便更容易添加/删除吗?

是的,您可以使用信号。例如:

from django.db.models.signals import pre_delete, pre_save


def block_writes(sender, **kwargs):
    if sender in (Table1, Table2, Table3, Table4, Table5):
        raise Exception("Writes blocked for these tables right now")


# To start blocking
pre_delete.connect(block_writes)
pre_save.connect(block_writes)


# To stop
pre_delete.disconnect(block_writes)
pre_save.disconnect(block_writes)
但这不会停止所有写入操作,也不能停止,因为它们并不都发送信号。例如,
Model.objects.update()
和原始SQL查询将继续工作。我肯定还有其他写路径我也错过了

此外,如果您只是在迁移过程编辑表时尝试停止web服务器进程的写入,则可以使用表锁。如果您使用的是MySQL,那么中有一个上下文管理器,用于在模型的表中处理这些内容