Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django RelatedManager将元组转换为Unicode字符串?_Python_Django - Fatal编程技术网

Python Django RelatedManager将元组转换为Unicode字符串?

Python Django RelatedManager将元组转换为Unicode字符串?,python,django,Python,Django,为了帮助自己学习Python,我正在使用Django编写一个简单的问题跟踪程序 我有两个简单的类(为了简洁起见省略了一些代码),Issue和Version 有一个ISSUE\u状态元组,用于维护问题的状态: ISSUE_STATE = ( ('p', 'In Progress'), ('o', 'Open'), ('r', 'Resolved'), ('c', 'Closed'), ) 它在问题中维护,如下所示: class Issue(models.Model

为了帮助自己学习Python,我正在使用Django编写一个简单的问题跟踪程序

我有两个简单的类(为了简洁起见省略了一些代码),
Issue
Version

有一个
ISSUE\u状态
元组,用于维护
问题
的状态:

ISSUE_STATE = (
    ('p', 'In Progress'),
    ('o', 'Open'),
    ('r', 'Resolved'),
    ('c', 'Closed'),
)
它在
问题中维护,如下所示:

class Issue(models.Model):
    state = models.CharField(max_length=1, choices=ISSUE_STATE)
    fix_version = models.ForeignKey(Version, related_name='issuesAsFix', null=True, blank=True, default=None)
(您也可以看到,
版本
维护了
问题
对象的列表。)

问题:

当我访问单个
Issue
实例的状态时,它将作为元组返回。当我访问由
版本
对象提供的
问题
的状态时,它将作为Unicode字符串返回:

>>> v = Version()
>>> v.save()

>>> i = Issue()
>>> i.fix_version = v
>>> i.state = ISSUE_STATE[1]
>>> i.save()

>>> i.state
('o', 'Open')
>>> v.issuesAsFix.all()[0].state
u"('o', 'Open')"

>>> i == v.issuesAsFix.all()[0]
True
>>> i is v.issuesAsFix.all()[0]
False
当作为
版本
的子属性访问时,
问题的
状态
变量
为什么是字符串

提前谢谢

这行不正确。应该是:

>>> i.state = ISSUE_STATE[1][0]

因此,
state
变量实际上不应该指向元组,而应该只指向元组的“键”,即单个字符?正确。ORM将对它进行DTRT。好的。让我困惑的一个难题是,即使
CharField
max_length
设置为
1
,整个Unicode字符串都存储在数据库中,而不仅仅是第一个字符。这是否只在视图/表单级别强制执行,而不是在使用shell时执行?啊,非常有趣的东西。谢谢
>>> i.state = ISSUE_STATE[1][0]