模型字段上的随机生成无限迁移

Dav*_* D. 0 python django django-migrations

这是models.py中的一个类:

class Shop(models.Model):
    ...
    code = models.CharField(max_length=4, default=generate_random_code())
Run Code Online (Sandbox Code Playgroud)

可以想象,generate_random_code()总是返回一个不同的字符串.

问题是,Django迁移引擎丢失了,因为每次我做一个python manage.py makemigrations,我得到一个新的修改Alter field tablet_code on shop.我想这是因为函数被执行了,但它不应该,所以Django认为我修改了代码.

你怎么解决这个问题?谢谢.

Ane*_*pic 5

根据文档,您可以传递一个可调用的

class Shop(models.Model):
    ...
    code = models.CharField(max_length=4, default=generate_random_code)
Run Code Online (Sandbox Code Playgroud)

..但不要像你正在做的那样打电话,或者你遇到了问题(导入模型时生成的随机数,但每次运行应用程序时都会更改)

相反,通过传递callable本身,迁移应该起作用,每次创建实例时都会得到一个新值

  • 此更改不仅解决了迁移问题,还修复了代码中的错误; 目前,当你的`models.py`被导入时,`generate_random_code`被调用一次,因此多个`shop`实例将以相同的代码结束.传递可调用意味着为每个`shop`实例调用`generate_random_code`. (4认同)