简体   繁体   English

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

[英]Django RelatedManager converts tuple to Unicode string?

To help myself learn Python, I'm writing a simple issue tracker using Django. 为了帮助自己学习Python,我使用Django编写了一个简单的问题跟踪器。

I have two simple classes (left some code out for brevity), Issue and Version 我有两个简单的类(为简洁起见,省略了一些代码): IssueVersion

There is an ISSUE_STATE tuple that is used to maintain an Issue 's state: 有一个ISSUE_STATE元组,用于维护Issue的状态:

ISSUE_STATE = (
    ('p', 'In Progress'),
    ('o', 'Open'),
    ('r', 'Resolved'),
    ('c', 'Closed'),
)

It's maintained in the Issue like so: 它在Issue的维护方式如下:

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)

(As you can also see, a Version maintains a list of Issue objects.) (如您所见, Version维护一个Issue对象的列表。)

The problem: 问题:

When I access the state of an individual Issue instance, it's returned as a tuple. 当我访问单个Issue实例的状态时,它将作为元组返回。 When I access the state of an Issue as provided by a Version object, it's returned as a Unicode string: 当我访问Version对象提供的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

Why is the state variable of the Issue a string when accessed as a child property of the Version ? 当作为Version的子属性访问时,为什么Issuestate变量是字符串?

Thanks in advance! 提前致谢!

 >>> i.state = ISSUE_STATE[1] 

This line is incorrect. 这行是不正确的。 It should be: 它应该是:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM