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:
- Provide a one-off default now (will be set on all existing rows with a null value for this column)
- Quit, and let me add a default in models.py
我在 Internet 上搜索发现的唯一“解决方案”是再次定义 default='',运行 makemigrations,然后手动编辑文件以删除 default=''。
我无法相信这是执行此操作的正确方法,而且目前还没有解决方案。
您需要为 created_at
和 update_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
>>>
这里您可以使用datetime
或django.utils.timezone
模块设置默认值。
我想向我的所有数据库对象添加一个 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:
- Provide a one-off default now (will be set on all existing rows with a null value for this column)
- Quit, and let me add a default in models.py
我在 Internet 上搜索发现的唯一“解决方案”是再次定义 default='',运行 makemigrations,然后手动编辑文件以删除 default=''。 我无法相信这是执行此操作的正确方法,而且目前还没有解决方案。
您需要为 created_at
和 update_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
>>>
这里您可以使用datetime
或django.utils.timezone
模块设置默认值。