选择字段中的 Django 空标签 - 没有查询集

2024-01-10

在选择字段上设置空标签给我带来了一些问题。我看过类似的答案this https://stackoverflow.com/questions/14541074/empty-label-choicefield-django,但这只是谈论形式。

假设我有以下模型:

class MyColorModel(models.Model):
    BLUE = 'blue'
    RED = 'red'
    GREEN = 'green'
    COLOR_CHOICES = (
        (BLUE, 'Blue'),
        (RED, 'Red'),
        (GREEN, 'Green'))

   my_color = models.CharField(max_length=5, choices=COLOR_CHOICES, blank=True)

还有这个表格:

class MyColorForm(forms.ModelForm):
   class Meta:
       model = MyColorModel
       fields = ['mycolor']

默认情况下,这将显示一个选择字段,空白标签设置为 ------

我想出了以下选项来设置标签。

1)更改我的COLOR_CHOICESmodel to:

COLOR_CHOICES = (
    ('', '---Please select your color---'),
    (BLUE, 'Blue'),
    (RED, 'Red'),
    (GREEN, 'Green'),

2)更改我的COLOR_CHOICESmodel to:

COLOR_CHOICES = (
    (None, '---Please select your color---'),
    (BLUE, 'Blue'),
    (RED, 'Red'),
    (GREEN, 'Green'),

3)添加以下内容init我的模型的方法form:

def __init__(*args, **kwargs):
    super(MyColorForm, self).__init__(*args, **kwargs)
    self.fields['my_color'].choices =  [('', '---Please select your color---')] + MyColorModel.COLOR_CHOICES

选项 1 导致了一些副作用,其中 if 语句我开始失败,这就是导致我创建选项 2 的原因。

将空白标签添加到我的模型中(选项 2)可以吗?如果我将其添加到那里会有副作用,还是将其添加到表单上更好?当我在表单中设置空标签时,似乎有相当多的代码。


在表单上设置您想要的内容是实现您想要的更正确的方法。在 Django 中,模型包含您所存储的数据的基本字段和行为。也就是说,它们定义了您的信息在数据库中的结构方式。

1. I didn't check it, but your first option
COLOR_CHOICES = (
    ('', '---Please select your color---'),
    (BLUE, 'Blue'),
    (RED, 'Red'),
    (GREEN, 'Green'),

my_color = models.CharField(max_length=5, choices=COLOR_CHOICES)

可能不起作用,因为您的第一个选择是空字符串,但是您的my_color字段不包含blank=True争论。这意味着它不允许将空字符串保存到数据库中。但是,如果您希望此字段是强制性的,那么您对空选择的定义不应该在这里,因为它不会带来任何附加值,因为它不包含有关您的数据结构的任何附加信息。

2. Your second option is definitely not the way to go [1] https://docs.djangoproject.com/en/1.9/ref/models/fields/#null:

避免使用null基于字符串的字段(例如 CharField 和 TextField),因为空字符串值将始终存储为空字符串,而不是 NULL。如果基于字符串的字段 null=True,则意味着它有两个可能的“无数据”值:NULL 和空字符串。在大多数情况下,“无数据”有两个可能的值是多余的。 Django 约定是使用空字符串,而不是 NULL。

3. Your third option looks good. I didn't work for some time with django forms, but if your code works, the Form is a more suitable place to define how your form should look like than doing it in your models, so go for that option.

或者查看您帖子中链接的 SO 问题的解决方案并实施这些解决方案。

祝你好运!

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

选择字段中的 Django 空标签 - 没有查询集 的相关文章

随机推荐

  • 如果 URI 不以此开头,则重写条件包罗万象

    所以我在 htaccess 文件的底部有这个重写条件作为一个包罗万象的东西 效果很好 但我希望它忽略任何请求并以 index cfm 开头 RewriteCond REQUEST FILENAME f RewriteRule index c
  • 根据客户的设计图像确定条形色调颜色的正确 RGBA 值?

    我经常收到模型图像 它们定义了 iPhone 应用程序的外观 这些可以来自与项目一样多的不同方法 有时是 balsamiq 甚至手绘 有时是 Photoshop 常见的一件事是通常指定的条形色调颜色以匹配某些公司品牌或整体应用程序设计 如果
  • 大型、复杂的对象作为 Web 服务结果 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 女士们先生们 大家好 好的 接着我的另一个问题ASP NET Web 服务结果 代理类和类型转换 https stackoverflo
  • 发布 Google 文档插件:项目密钥与当前项目不相关

    我正在尝试按照以下说明发布一个简单的 Google 文档插件 发布附加组件 https developers google com apps script add ons publish 但是 当完成 Google Apps Marketp
  • 如何在Qt Creator中配置CDB?

    问题here https stackoverflow com q 5318691 559085与我的相同 但那里的解决方案对我不起作用 我在 Windows 7 上使用 QtCreator 2 4 1 当我尝试调试一个简单的 hello w
  • 数组解构跳过值

    My 爱彼迎风格指南 https github com airbnb javascript告诉我我应该使用数组解构对于下面的作业 const splittedArr 1 2 3 4 5 const result splittedArr 1
  • MacPython:以编程方式查找所有串行端口

    我正在寻找一种解决方案 以编程方式使用 python 返回所有可用的串行端口 此刻我正在进入ls dev tty or ls dev cu 进入终端以列出端口并将它们硬编码到 pyserial 类中 你可以这样做 import glob d
  • 执行 sidekiq 登录 heroku

    我想在我的 heroku 环境中执行 sidekiq 日志文件 但我在文档中找不到任何内容 谷歌也没有在这里帮助我 我确信它一定是这样的exec sidekiq L log sidekiq log但该命令在 Heroku 上失败 如何在 h
  • 通过触摸或点击在 Android Google 地图上添加标记

    我想在 Android 上使用 Google 地图开发地图应用程序 现在 我想通过触摸或点击地图在地图上添加标记 如何应用触摸事件将标记放在地图上 尝试使用新的谷歌地图 API v2 https developers google com
  • 将非连续列数据合并为单列

    我想将值从列 B C D 复制到列 J 同时保持值的行位置 我想将值从 E F G 列复制到 K 列 同时保持行位置 Desired results in Cols J K The colors are only to clarify my
  • AngularJS - 依赖下拉列表:在模型中存储一个值,使用其他值作为下一个下拉列表的源

    我有两个依赖的下拉菜单 一个显示国家 另一个显示国家 我希望第一个只保存国家 地区 ID 但使用整个对象作为源 对于第二个下拉列表 这是我到目前为止所拥有的 同一屏幕中可能有许多这样的下拉菜单 因此这可能会使事情变得复杂 因为我需要复制临时
  • 如何以编程方式从 win7 中的“屏幕分辨率”对话框获取显示器编号?

    当您按 屏幕分辨率 对话框中的 识别 按钮时 Windows 会在每个显示器上显示大的白色显示器编号 在 Windows XP 中 使用 EnumDisplayDevices 很容易以编程方式与显示器坐标一起找到它们 但在 Windows
  • 通过php提取excel中动态变化的数据

    我有一个打开的 Excel 工作表 另一个程序通过 DDE 不断更新该工作表 我希望有一个 php 脚本来访问此 Excel 工作表中的一些数据 我尝试过使用 PHPExcel 但似乎我无法让我所做的更改 例如通过 setCellValue
  • Grails:映射同一类型的字段和belongsTo的列名

    我正在尝试映射此类的列名称 class Amount String total Total amount of something String type Type of amount Dollars Times something Bon
  • 使用 jq/yq 进行遍历

    我有一个类似于下面的数据文件 user01 name User01 Name age 20 sex male state CA zip 92012 user02 name User02 Name age 22 sex female user
  • Gitlab 与 SonarQube 集成

    我对开发社区 特别是 DevOps 实践还很陌生 作为项目的一部分 我们正在尝试将 SonarQube 与 Gitlab 集成 在 SonarQube 和 Git CI 持续集成 上进行了一些研发 看起来插件已为 Github 和 Sona
  • apache http 基于 ip 重写/重定向

    我想将一个ip重定向到我网站的另一个视图 例如 我希望来自ip x的访问者看到www xxx com DEBUG 1当所有其他访问者看到正常的 www xxx com 时 我该如何在 apache 配置文件中执行此操作 使用哪些指令 下面是
  • 通过 NSUserDefaults 设置 ios UserAgent:工作一半的时间?

    这真让我抓狂 我有两个只是 UIWebView 的应用程序 使用 XCode 4 5 2 和 iOS 6 0 SDK 我想更改网络调用的 UserAgent 我在以下两个地方都使用了这段代码 NSString secretagent MyU
  • Eclipse CDT:禁用红色下划线

    我使用 eclipse cdt 并且包含了一些文件 不幸的是 我无法将包含路径添加到我的 Eclipse 项目中 因为这样当 Eclipse 开始对新添加的包含进行索引时 它总是会崩溃 因此我想关闭突出显示错误的功能 我可以在哪里执行此操作
  • 选择字段中的 Django 空标签 - 没有查询集

    在选择字段上设置空标签给我带来了一些问题 我看过类似的答案this https stackoverflow com questions 14541074 empty label choicefield django 但这只是谈论形式 假设我