2012-12-03 72 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美分。

相关问题