模型 django 中唯一随机默认值的迁移问题

Pra*_*nna 2 python django model

我想向我已有的模型添加一个名为 的新字段color。我希望它是唯一的,并且默认情况下它是随机选择的。所以我要做的是:

color = models.CharField(max_length=15, default=random_color, unique=True)
Run Code Online (Sandbox Code Playgroud)

我的random_color样子是这样的

def random_color():
"""
Returns:
    [string] : returns a rgb value in hex string
"""
while True:
    generated_color = f'#{random_hex()}{random_hex()}{random_hex()}'
    if not MyModel.objects.filter(color=generated_color):
        return generated_color
Run Code Online (Sandbox Code Playgroud)

我遵循与此处提供的类似逻辑。

现在这种方法的问题是没有color可以开始寻找的东西。

我还希望我的迁移将一堆默认随机颜色值添加到我已经存在的表中。

我该如何解决?

Hor*_*Kid 5

可能有一种更简单的方法来完成此操作,但以下步骤应该有效:

  1. 添加color带有null=True或不带有默认值和unique=True.
  2. 为您的应用程序运行makemigrations
  3. 运行makemigrations --empty以为您的应用程序创建自定义迁移。使用您添加RunPythonrandom_color()操作来填充新列。
  4. 更改color字段以添加默认的唯一约束,并删除null=True.
  5. 再次运行makemigrations