Python Django RelatedManager将元组转换为Unicode字符串?
为了帮助自己学习Python,我正在使用Django编写一个简单的问题跟踪程序 我有两个简单的类(为了简洁起见省略了一些代码),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
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]