2012-12-03 122 views
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 

有人能告訴我爲什麼這個代碼是登陸了我404即使我試圖查看各建有internal_state = 1的時候,我沒有登錄在?抱歉發佈這樣一個簡單的問題,但我不明白它有什麼問題。

+0

儘量避免'是假'。最好使用'if request.user.is_staff'。 – Alasdair

回答

3

internal_state的類型是一個字符串,而不是一個整數。

試試這個:

if not request.user.is_staff and building.internal_state != '1': 
    raise Http404 
else: 
    pass 
+2

不要使用'is'來進行字符串比較。 –

+0

你是對的,我只是指着相同的代碼而不是提問,只是用引號。我會編輯答案。 – esauro

+0

嗨!,不是'1'沒有工作,但!='1'確實有效。謝謝! – Monolith

0

用「是」比較操作可能是危險的,即使整數。在CPython的實現,你可以檢查,如果你輸入:

a = 1 
b = 1 
a is b 
#True 

但如果你輸入的東西是這樣的:

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

它其實是「是」經營者比較不值,但地址在記憶中。

這是我的50美分。

相關問題