我正在使用以下查询进行过滤
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('[],')
然而这似乎有用
list = AboutMe.objects.order_by('MyLinkedInLastName').filter(Q(MyGender__contains='_M'))
BTW我已经简化了查询以达到此目的。这似乎是编码问题。什么是使这项工作更好,更健壮的最佳方法?
答案 0 :(得分:0)
您将数据存储为从列表的Python表示创建的字符串。这是一个非常糟糕的主意。
当前的问题是,即使您删除了[
个字符并在逗号上拆分,您剩下的就是字符串 "u'_M'"
和{{1} } - 也就是说,"u'_F'"
个字符以及开始和结束引号被存储为字符串的一部分。所以这不是你想象的“Unicode字符串”,而只是一个包含前导u
后跟引号的字符串。
您可以将文本存储为JSON,而不是这样做 - 在Django中有各种JSONField实现,它们负责为您序列化和反序列化数据。