DRF created_by updated_by 在迁移过程中失败

DRF created_by updated_by fail during migrations

我想向我的所有数据库对象添加一个 created_by 和 updated_by 字段。我为此创建了一个将被大多数其他对象使用的通用模型。到目前为止,我已经解决了大部分障碍。但是 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

我得到的错误是:

You are trying to add a non-nullable field 'created_by' to devicetype without a default; we can't do that (the database needs something to populate existing rows). Please select a fix:

  1. Provide a one-off default now (will be set on all existing rows with a null value for this column)
  2. Quit, and let me add a default in models.py

我在 Internet 上搜索发现的唯一“解决方案”是再次定义 default='',运行 makemigrations,然后手动编辑文件以删除 default=''。 我无法相信这是执行此操作的正确方法,而且目前还没有解决方案。

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

您在迁移过程中收到的消息不是错误。如果你想提供一个默认值,select fix 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模块设置默认值。