python Django在不断地做同样的改变

mrphzbgm  于 2023-01-04  发布在  Python
关注(0)|答案(2)|浏览(96)

我有一个使用Django 1.10.7mysql 14.14 Distrib 5.5.54构建的django项目
如果我这样做:

$ python manage.py makemigrations my_app

我得到:
"my_app"的迁移:
我的应用程序/迁移/0023_auto_20180301_1419.py:

  • 更改联赛的字段引用
    然后:
$ python manage.py migrate

要执行的操作:
应用所有迁移:管理员,身份验证,内容类型,my_app,会话
正在运行迁移:
正在应用我的应用程序.0023_auto_20180301_1419 ...确定
然后,就在那之后,我想:

$ python manage.py makemigrations my_app

我得到:
"my_app"的迁移:
我的应用程序/迁移/0024_auto_20180301_1421.py:

  • 更改联赛的字段引用
    正如你所看到的,这是和以前一样的改变。看起来django没有很好地进行迁移,或者做了但没有检测到任何东西。
    models.py中,类如下所示:
class League(models.Model):
    name = models.CharField(max_length=50)
    id_creator = models.ForeignKey('auth.User', on_delete=models.CASCADE)
    id_tour = models.ForeignKey('Tour', on_delete=models.CASCADE)
    step = models.IntegerField(default=0)
    creation_date = models.DateTimeField(default=timezone.now)
    reference = models.CharField(max_length=20, default=id_generator())

    def __str__(self):
        return self.name

我做错了什么?

rmbxnbpk

rmbxnbpk1#

提供id_generator函数作为默认值,而不是返回值,每次创建新对象时都会调用该函数。
reference = models.CharField(max_length=20, default=id_generator)

mfuanj7w

mfuanj7w2#

Django的移民们一直在做同样的改变

我打这个由于我自己的愚蠢,希望这将保存一点时间的人。我最终没有同样的问题作为OP,但确实有同样的症状。
我已经有了一个州/国家对的列表,所以我发现在创建一个新的模型类时引用它是很方便的,我使用了一个集合生成器来提取国家,同时消除重复:

list_country = models.CharField("List Country", max_length=256, null=True, blank=True,  
    choices={(y, y) for (x, y) in TAXABLE_STATES})

Django一直想修改list_country上的字段,一遍又一遍。
然后我注意到每次迁移都只是重新排序国家。当然,***顺序在集合***中是任意的。我应用了sorted(),我的问题就解决了。

list_country = models.CharField("List Country", max_length=256, null=True, blank=True,  
    choices=sorted({(y, y) for (x, y) in TAXABLE_STATES}))

相关问题