【发布时间】:2021-11-11 20:14:44
【问题描述】:
我想为我的所有数据库对象添加一个 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
我得到的错误是:
您正在尝试将不可为空的字段“created_by”添加到没有默认值的设备类型;我们不能这样做(数据库需要一些东西来填充现有的行)。 请选择一个修复:
- 现在提供一次性默认值(将在所有现有行上设置此列的空值)
- 退出,让我在 models.py 中添加一个默认值
我在互联网上找到的唯一“解决方案”是定义 default='',再次运行 makemigrations,然后手动编辑文件以删除 default=''。 我不敢相信这是正确的方法,而且还没有解决方案。
【问题讨论】:
-
这不是错误。它只是询问它应该对 现有 记录的
created_by做什么。default=''完全没有意义:那是一个字符串,ForeignKey只接受用户对象,或者用户对象的主键。
标签: django-models django-rest-framework