为什么这个简单的条件视图代码不起作用?

时间:2012-12-03 18:05:57

标签: django django-views

型号:

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?很抱歉发布这么简单的问题,但我看不出它有什么问题。

2 个答案:

答案 0 :(得分:3)

internal_state的类型是字符串,而不是整数。

试试这个:

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

答案 1 :(得分:0)

与'is'运算符相比,即使使用整数,运算符也很危险。在CPython实现中,您可以检查是否键入:

a = 1
b = 1
a is b
#True

但是如果你输入这样的内容:

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

事实上,'is'运算符不是比较值而是比较内存中的地址。

这是我的50美分。