python - 如果字段的选择列表发生变化,则停止 Django 创建迁移

标签 python django database-migration

我有一个名为“foocore”的 Django 核心应用程序。

有几个可选的类似插件的应用程序。例如“superfoo”。

在我的例子中,每个插件都在属于“foocore”的模型 CharField 中添加了一个新选择。

如果选择列表发生变化,Django 迁移会检测变化。

我觉得没必要。至少有一位其他开发人员也这么认为:

https://code.djangoproject.com/ticket/22837

class ActivePlugin(models.Model):
    plugin_name = models.CharField(max_length=32, choices=get_active_plugins())

获取选择的代码:

class get_active_plugins(object):
    def __iter__(self):
        for item in ....:
            yield item

核心“foocore”在多个项目中使用,每个安装都有一组不同的插件。 Django 试图创建无用的迁移....

有没有办法解决这个问题?

最佳答案

有关更多信息,请参阅此错误报告和讨论:https://code.djangoproject.com/ticket/22837

建议的解决方案是使用可调用对象作为选择的参数,但似乎这还没有针对字段执行,而仅针对表单执行。

如果您确实需要动态选择,ForeignKey 是最佳解决方案。

另一种解决方案是通过字段的自定义清理方法和/或创建自定义表单来添加要求。表单字段支持可调用的选择

有关详细信息,请参阅此答案:https://stackoverflow.com/a/33514551/54017

关于python - 如果字段的选择列表发生变化,则停止 Django 创建迁移,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31788450/

相关文章:

django - 如何显示由 prefetch_related 生成的查询

laravel - 如何使用迁移在没有 created_at 和 Updated_at 列的 laravel 中创建表

python - 从数组中删除所有零

python - 确定两个列表/数组的混洗索引

python - 使用 django 模板将 json 填充为 html

php - Laravel 迁移命名约定

android - 房间持久性库 : Weird Error during migration

python - 嵌入python : Version inconsistent with ProgramFullPath

python - 从条目中获取一个整数

python - 模块未找到错误 : No module named 'xxxdjango'