0

我正在使用以下查询进行过滤

list = AboutMe.objects.order_by('MyLinkedInLastName').filter(Q(MyGender__contains=Gender1))

但是当我使用 unicode 字符串时它似乎不起作用。让我解释。在表中,数据字段存储为:[u'_M', u'_F']例如。例如,选择另一条记录的行和字段可能是 [u'_M']。当我将它剥离到文本时 - 即删除 [] 并显示我得到 u'_M' 并在过滤器中使用它作为 Gender1 。现在这似乎不起作用。但是如果我将“_M”硬编码到过滤器中就可以了。我不明白发生了什么 - 这里有某种隐式转换吗?

我从 Gender1Gender1 = GenderField.split()[0].strip('[],')

然而,这似乎有效

list = AboutMe.objects.order_by('MyLinkedInLastName').filter(Q(MyGender__contains='_M'))

顺便说一句,我在这里简化了查询。这似乎是编码的问题。使这项工作良好而稳健的最佳方法是什么?

4

1 回答 1

0

您将数据存储为从 Python 表示的列表创建的字符串。这是一个非常糟糕的主意。

最直接的问题是,即使您删除了[字符并在逗号上拆分,您剩下的只是字符串 "u'_M'""u'_F'"也就是说,u字符以及开始和结束引号被存储为字符串的一部分。因此,这不是您想象的“Unicode 字符串”,而只是一个包含前导u后跟引号的字符串。

除了这样做,您也许可以将您的文本存储为 JSON - Django 中有各种 JSONFields 实现,它们为您处理数据的序列化和反序列化。

于 2013-09-21T13:30:12.547 回答