0
私はPythonを学ぶのを助けるために、私はDjangoを使って簡単な問題追跡ツールを書いています。Djangoの関連マネージャはタプルをUnicode文字列に変換しますか?
私はIssue
の状態を維持するために使用されるISSUE_STATE
タプルがあり
Issue
と
Version
:
ISSUE_STATE = (
('p', 'In Progress'),
('o', 'Open'),
('r', 'Resolved'),
('c', 'Closed'),
)
それが維持されます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)
(ご覧のとおり、Version
Issue
オブジェクトのリストを維持して)
問題:。
私は、個々のIssue
インスタンスの状態にアクセスが、それはタプルとして返されます。
>>> 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
なぜVersion
の子プロパティとしてIssue
文字列のstate
変数にアクセスされる:Version
オブジェクトによって提供されるように、私はIssue
の状態にアクセスすると、それは、Unicode文字列として返されるのですか?
ありがとうございます!
したがって、 'state'変数は実際にはタプルの 'key'ではなく、その単一文字を実際に指すべきではありませんか? –
正しい。 ORMはそれに対してDTRTを行います。 –
。私に混乱を招くパズルの1つは、「CharField」の「max_length」が「1」に設定されていても、Unicode文字列全体が最初の文字ではなくデータベースに格納されているということです。これは、ビュー/フォームレベルでのみ適用され、シェルを使用するときではありませんか? –