Django 1.8.2(使用 Python 3.4):如何将带有选项的 CharField 存储在带有 ENUM 列的 MySQL 表中?

Posted

技术标签:

【中文标题】Django 1.8.2(使用 Python 3.4):如何将带有选项的 CharField 存储在带有 ENUM 列的 MySQL 表中?【英文标题】:Django 1.8.2 (using Python 3.4): How is a CharField with choices stored in a MySQL table with an ENUM column? 【发布时间】:2015-11-01 15:05:58 【问题描述】:

根据a *** question,一个答案说我可以在我的 Django 模型中指定一个 CharField 来模仿 mysql ENUM 列的功能。假设我在 models.py 模块中声明了以下元组集:

HOWDY_EVERYONE = (
    ('0', 'How are you?'),
    ('1', 'How\'s your day?'),
    ('2', 'What are you doing here?')
)

现在我有以下模型,它只存储一个 CharField,其中包含我刚刚声明的元组集:

class HowdyEveryoneModel(models.Model):
    message_to_everyone = models.CharField(max_length=1, choices=HOWDY_EVERYONE, db_column='Message to Everyone')

假设我有一个 MySQL 表,它只包含一个非主键列,即“给所有人的消息”。它是 ENUM 类型,接受三个值之一,就像 HOWDY_EVERYONE 元组集中的值一样:“你好吗?”、“你今天过得怎么样?”或“你在这里做什么?”

这是如何保存在 MySQL 数据库中“给所有人的消息”下的?它是简单的“0”、“1”或“2”,还是“你好吗?”、“你今天好吗?”或“你在这里做什么?” 换句话说,一个带有选项的 Django CharField 是如何保存在 MySQL ENUM 列中的?

如果不可能有“你好吗?”、“你今天好吗?”或“你在这里做什么?”在此 MySQL 表的“给所有人的消息”列中,当我将模型保存在 MySQL 表中时,我需要对我的 Django 字段执行什么操作以使其保存为这三个值之一?

【问题讨论】:

【参考方案1】:

Django 会将您选择的元组中索引 0 上的任何内容放入数据库。这意味着:它将是“0”、“1”或“2”。如果你希望它是“你好吗?”和其他,只需将其作为您选择的 0 索引。您当然可以在第一个索引中重复它(作为标签)。

【讨论】:

我不确定您的意思是“您选择的 0 索引”。可以举个例子吗? 索引 0 是 '0'、'1'、'2' 在您选择的内部元组中的位置。索引 1 是“你好吗?”、“你今天好吗?”、“你在这里做什么?”是 好的,那么我将如何访问基本上“你好吗?”值并将其保存到表中?

以上是关于Django 1.8.2(使用 Python 3.4):如何将带有选项的 CharField 存储在带有 ENUM 列的 MySQL 表中?的主要内容,如果未能解决你的问题,请参考以下文章

消息 - 找不到安装的python-django或python3-django版本

Django/djcelery 1.8.2 AppRegistryNotReady:翻译基础设施无法初始化

mod_wsgi (3.4-14) / Apache 2.4.12 / Red Hat (6.7) / Django 1.8.2 在负载下挂起

Django安装以及搭建简易服务器-基础2

Python-Django使用MemcachedCache缓存

Django项目发布 环境部署(下)