DRF created_by updated_by在迁移过程中失败



我想将created_by和updated_by字段添加到我的所有DB对象中。我为此创建了一个通用模型,该模型将被大多数其他对象使用。到目前为止,我已经解决了大多数障碍。但是make migrations脚本以一个错误结束:

我的型号:

class CommonModel(models.Model):
"""Common fields that are shared among all models."""
created_by = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.PROTECT,
editable=False, related_name="+")
updated_by = models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.PROTECT,
editable=False, related_name="+")
created_at = models.DateTimeField(auto_now_add=True,
editable=False)
updated_at = models.DateTimeField(auto_now=True,
editable=False)
class Meta:
abstract = True
class Tag(CommonModel):
"""Tag to be used for device type"""
name = models.CharField(max_length=255)
def __str__(self):
return self.name

我得到的错误是:

您正试图在没有默认值的情况下将不可为null的字段"created_by"添加到设备类型中;我们不能这样做(数据库需要一些东西来填充现有的行(。请选择修复程序:

  1. 立即提供一次性默认值(将在所有现有行上设置此列的null值(
  2. 退出,让我在models.py中添加一个默认值

;解决方案";我发现在Internet上搜索是为了定义default='',再次运行makemigrations,然后手动编辑文件以删除default=''。我不敢相信这是正确的做法,而且目前还没有解决办法。

您需要为created_atupdate_at设置默认值,因为它们不是null=True

迁移过程中收到的消息不是错误。如果你想提供一个默认值,选择修复1.,它应该显示以下提示,

Please enter the default value now, as valid Python
The datetime and ` modules are available, so you can do e.g. timezone.now
Type 'exit' to exit this prompt
>>> 

在这里,您可以使用datetimedjango.utils.timezone模块设置默认值。