在条件中比较unicode字符串时解决TypeError

时间:2013-06-15 20:26:37

标签: python django django-models

我有两个通过模型中的FK约束连接的类。执行查询后,我在QuerySet中打包一个返回对象列表,其中相关对象的字段与相等比较匹配。

tagList = ContractPlanTags.objects.filter(tag_value_id = "44") | ContractPlanTags.objects.filter(tag_value_id = "45")

tagCollection = []

for tag in tagList:
  if tag.tag_value_id.tag == u"SNPFlag" | tag.tag_value_id.tag == u"PlanType":
    tagCollection.append(tag)

作为参考,tag_value_id是对包含tag字段的另一个对象的FK引用。由于if比较,我得到了

ERROR: test_metaobject_access (app.tests.Tests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "/home/jason/workspace-sts/rowdmap_taxonomy/app/tests.py", line 58, in test_metaobject_access

if tag.tag_value_id.tag == u"SNPFlag" | tag.tag_value_id.tag == u"PlanType":
TypeError: unsupported operand type(s) for |: 'unicode' and 'unicode'

如何解决此错误?

1 个答案:

答案 0 :(得分:3)

我想你想要一个boolean or operator

if tag.tag_value_id.tag == u"SNPFlag" or tag.tag_value_id.tag == u"PlanType":

或者,对于这种特定情况,您还可以使用in成员资格测试:

if tag.tag_value_id.tag in {u"SNPFlag", u"PlanType"}:

你不能在unicode字符串上使用| bitwise OR operator;它通常适用于整数:

>>> 10 | 1
11

或套装(见所有supported set operations):

>>> {1, 2} | {2, 3}
set([1, 2, 3])

或定义__or__ special method的对象,例如特定于Django的.filter()方法返回的对象。