如何在Django中比较模型字段与选项的Unicode字符串?
我不太确定自己哪里做错了,但我在比较两个值的时候,明明我很确定它们是一样的,但代码就是不执行。
假设我有这个模型(请原谅我在模型和字段名称上有点小错误)
class TestOne(models):
gender = models.Charfield(max_length=10, choices=GENDER_CHOICES)
我的选择
GENDER_CHOICES = (("MALE", "MALE"), ("FEMALE", "FEMALE"))
我非常确定我的 gender
字段是 MALE
,所以我写了一个判断,如果是 MALE
就执行某些操作。
if a.gender is `MALE`:
# do something here
但是代码从来没有判断为真。我检查过 a.gender
是一种 unicode
类型,所以我还用 str(a.gender)
确保它也是一个字符串,但还是没有成功。
我是不是哪里做错了?
附注:我用 a.gender
打印了一下,确认输出是 MALE
提前谢谢你
相关问题:
- 暂无相关问题
1 个回答
6
不要这样做:
if a.gender is 'MALE':
# equivalent to:
# id(a.gender) == id('MALE')
应该这样做:
if a.gender == 'MALE':
'is'
这个关键词用来检查对象的身份,也就是说,它用来判断两个变量或对象是否指向同一个内存地址。而 '=='
则是用来检查两个对象是否相等,这个相等的定义是根据类里的 '__eq__'
方法来决定的。在你的例子中,这个方法会进行你期待的字符串比较。
想了解更多详细信息,可以查看这个链接:Python中 `==` 和 `is` 之间有什么区别?