0

我有两个通过模型中的 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'

如何解决此错误?

4

1 回答 1

3

我认为您想要一个布尔or运算符

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 字符串使用|按位 OR 运算符;它通常适用于整数:

>>> 10 | 1
11

或集合(查看所有支持的集合操作):

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

或定义__or__特殊方法的对象,例如 Django 特定.filter()方法返回的内容。

于 2013-06-15T20:27:53.753 回答