0

モデル:

INTERNAL_STATES = (
    ('1', _('Live')),
    ('2', _('Coming soon')),
    ('3', _('Draft')),
)

意見:

if request.user.is_staff is False and building.internal_state is not 1:
    raise Http404
else:
    pass

ログインしていないときに表示しようとしている建物に internal_state = 1 がある場合でも、このコードで 404 が表示される理由を誰か教えてもらえますか? このような簡単な質問を投稿して申し訳ありませんが、何が問題なのかわかりません。

4

2 に答える 2

3

internal_state の型は、整数ではなく文字列です。

これを試して:

if not request.user.is_staff and building.internal_state != '1':
    raise Http404
else:
    pass
于 2012-12-03T18:10:58.413 に答える
0

'is' 演算子との比較は、整数であっても危険です。CPython の実現では、次のように入力すると確認できます。

a = 1
b = 1
a is b
#True

ただし、次のように入力すると:

a = -6
b = -6
a is b
#False

「is」演算子が値ではなくメモリ内のアドレスを比較するのは事実です。

それが私の50セントです。

于 2012-12-03T20:53:32.633 に答える