如何在Django中比较模型字段与选项的Unicode字符串?

1 投票
1 回答
1574 浏览
提问于 2025-05-17 16:25

我不太确定自己哪里做错了,但我在比较两个值的时候,明明我很确定它们是一样的,但代码就是不执行。

假设我有这个模型(请原谅我在模型和字段名称上有点小错误)

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` 之间有什么区别?

撰写回答