Django 在选择列表更改时创建毫无意义的迁移

2024-06-01

我正在尝试使用可调用创建一个带有选择字段的模型,以便 Django 在选择列表更改时不会创建迁移,如中所述this https://stackoverflow.com/questions/31788450/stop-django-from-creating-migrations-if-the-list-of-choices-of-a-field-changes问题在这里。

class Quote(models.Model):
    severity = models.IntegerField(choices=get_severity_choices)
    ...

class get_severity_choices(object):
    def __iter__(self):
        for item in SEVERITY_CHOICES:
            yield item

where

SEVERITY_CHOICES = (
    (1, 'Low'),
    (2, 'Medium'),
    (3, 'High'),
)

但是,我收到一条错误消息:

quoting.Quote.severity: (fields.E004) 'choices' must be an iterable (e.g., a list or tuple).

我认为你混淆了choices论点Model场,并且在forms.ChoiceField场地。在一个model https://docs.djangoproject.com/en/1.8/ref/models/fields/#choices, choices必须是可交互的 - 你不能传递可调用的:

choices:一个可迭代对象(例如列表或元组),由以下可迭代对象组成 正好有两个项目(例如 [(A, B), (A, B) ...])用作选择 这个领域。

Your get_severity_choices类未被识别为可迭代对象,因为 Django 希望它能够子类化collections.Iterable https://docs.python.org/2/library/collections.html#collections.Iterable而不是仅仅暴露一个__iter__ method.

You can pass 可调用的 https://docs.djangoproject.com/en/1.8/ref/forms/fields/#django.forms.ChoiceField.choices to a FormField:

choices:用作该字段的选择的二元组的可迭代(例如,列表或元组),或者返回此类可迭代的可调用。

For a Model字段,但是您必须事先指定您的选择。还来自文档:

注意choices可以是任何可迭代对象——不一定是列表 或元组。这使您可以动态地构建选择。但如果你发现 自己黑客攻击choices保持活力,你的情况可能会更好 使用带有外键的正确数据库表。choices是为了 静态数据不会发生太大变化(如果有的话)。

至于为什么 Django 创建看似无用的迁移,有一些讨论这张票 https://code.djangoproject.com/ticket/22837:

这是设计使然。有几个原因,其中最重要的是......历史上某个时刻的数据迁移需要有一个完整的 模型的准确表示,包括它们的所有选项,而不是 只是那些影响数据库的内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django 在选择列表更改时创建毫无意义的迁移 的相关文章

随机推荐

  • Laravel 8、Sanctum、Fortify /logout 在 Postman 中抛出“CSRF 令牌不匹配”

    我安装了 L8 Sanctum 和 Fortify 进行身份验证 我以前可以 login 使用了Pre request Script设置X XSRF TOKEN 我什至得到了 api user成功地 但当我这样做时 logout 我在 Po
  • Laravel 5.3:护照实现 - {“error”:“invalid_client”,“message”:“客户端身份验证失败”}

    我按照中提到的确切步骤进行操作Laracast Laravel 5 3 的新增功能 Laravel Passport https laracasts com series whats new in laravel 5 3 episodes
  • 使用安全函数在 C 中将字符串添加到字符串

    我想将文件名复制到字符串并附加 cpt 但我无法使用安全函数 strcat s 来做到这一点 错误 字符串不是空终止的 我确实设置了 0 如何使用安全函数修复此问题 size strlen locatie size nieuw char m
  • CSS 字体在 Firefox 中不起作用

    我下面有这个字体代码 它在谷歌浏览器中工作正常 但在火狐浏览器中根本不起作用 为什么
  • 如何避免应用程序停止后 docker 容器停止

    有一个带有 Postgres 服务器的 docker 容器 postgres 停止或崩溃 无关紧要 我需要检查一些环境变量和一些文件的状态 默认情况下 容器在应用程序完成后停止 我知道有一个选项可以更改 dockerfile 中的默认行为
  • SSRS将参数传递给子报表

    我有 2 个表 它们都有 countyID 列 我有一个主报告 它根据如下查询显示报告 SELECT countyID name address state FROM TableA 我在 TableA 上设置了一个参数 您可以在其中选择名称
  • 如何在 jQueryUI 工具提示中换行

    新版本的 jQueryUI 1 9 附带了本机工具提示小部件 经过测试 如果内容 标题属性的值 很短 它就可以正常工作 但如果内容很长 工具提示一旦显示就会与输入文本重叠 有a demo http jqueryui com tooltip
  • 在 passtrough 属性中使用 f:selectItems var

    我可以将表达式传递给 JSF 2 传递属性吗 以下代码不起作用 表达 country isoCode 不予评价
  • Windows 窗体不会在调试模式下显示

    我最近升级到 VS 2012 我有一组在 VS 2010 中编码的 UI 测试 我试图在 VS 2012 中启动它们 我有一个 Windows 窗体 在开始时显示使用 AssemblyInitialize 属性运行测试 我使用此表单允许用户
  • 如何列出 python PDB 中的当前行?

    在 perl 调试器中 如果重复列出离开当前行的代码段 可以通过输入命令返回到当前行 点 我无法使用 python PDB 模块找到任何类似的东西 如果我list如果我自己离开当前行并想再次查看它 似乎我必须记住当前正在执行的行号 对我来说
  • 是否可以执行具有输出参数的 T-SQL 存储过程,同时忽略 SELECT 语句?

    我正在从另一个存储过程调用一个存储过程 并且我调用的过程有一个输出参数 然后我将输出值传输到局部变量中 这一切都很好 但问题是这个过程还有一个select其中的声明 所以当我exec 该过程的结果将在最终结果集中返回 有没有一种方法可以简单
  • 带有空白白屏的 WebView

    我在 DialogFragment 中有一个 webview 它使用以下方式显示文档和 PDF它可以进行几次尝试 但如果用户尝试频繁打开和关闭对话框 webview 将显示空白屏幕 我已经尝试了所有的线程link1 https stacko
  • 编译的表达式树会泄漏吗?

    根据我的理解 JIT 代码在程序运行时永远不会从内存中释放 这是否意味着重复调用 Compile 表达式树上会泄漏内存吗 这意味着仅在静态构造函数中编译表达式树或以其他方式缓存它们 这可能不那么简单 正确的 他们可能是GCed Lambda
  • 水银大号

    你知道如何让 Quicksilver 在屏幕上显示大量的大字体吗 通过点击 然后输入自由文本 选择 操作 下的 查看大字体 并按 Enter 键 好吧 有谁知道一种以编程方式做到这一点的方法吗 另外 quicksilver 是必需的还是内置
  • 将输入发送到 python 子进程而不等待结果

    我正在尝试为一段代码编写一些基本测试 该代码通常通过 stdin 无休止地接受输入 直到给出特定的退出命令 我想检查程序是否在给出一些输入字符串时崩溃 经过一段时间来考虑处理 但似乎无法弄清楚如何发送数据而不是陷入等待我不知道的输出关心 我
  • 如何将命名空间与 TypeScript 外部模块一起使用?

    我有一些代码 基本类型 ts export namespace Living Things export class Animal move export class Plant photosynthesize dog ts import
  • 使用 Java 从 S3 上的文件在 S3 上创建 zip 文件

    我在 S3 上有很多文件 需要对其进行压缩 然后通过 S3 提供压缩文件 目前 我将它们从流压缩到本地文件 然后再次上传该文件 这会占用大量磁盘空间 因为每个文件大约有 3 10MB 而且我必须压缩多达 100 000 个文件 所以一个 z
  • 使用任何节点模块在内存中创建 ZIP 文件

    是否有任何节点模块可以在内存中创建 zip 我不想将 zip 文件保存在磁盘上 以便我们可以将这个创建的 zip 文件发送到其他服务器 从内存 做这个的最好方式是什么 这是我的例子 var file system require fs va
  • Oracle:如果表存在

    我正在为 Oracle 数据库编写一些迁移脚本 并希望 Oracle 有类似于 MySQL 的东西IF EXISTS构造 具体来说 每当我想删除 MySQL 中的表时 我都会执行类似的操作 DROP TABLE IF EXISTS tabl
  • Django 在选择列表更改时创建毫无意义的迁移

    我正在尝试使用可调用创建一个带有选择字段的模型 以便 Django 在选择列表更改时不会创建迁移 如中所述this https stackoverflow com questions 31788450 stop django from cr