处理数据库查询并过滤Django和Unicode

时间:2013-09-21 11:09:40

标签: python sql django object unicode

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

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

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

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

获取Gender1

然而这似乎有用

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

BTW我已经简化了查询以达到此目的。这似乎是编码问题。什么是使这项工作更好,更健壮的最佳方法?

1 个答案:

答案 0 :(得分:0)

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

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

您可以将文本存储为JSON,而不是这样做 - 在Django中有各种JSONField实现,它们负责为您序列化和反序列化数据。