0

我的模型中的一个字段是格式为 substring1-substring2-substring3-substring4 的 charField,它可以具有以下值范围:

"1-1-2-1"
"1-1-2-2"
"1-1-2-3"
"1-1-2-4"
"2-2-2-6"
"2-2-2-7"
"2-2-2-9"
"3-1-1-10"
"10-1-1-11"
"11-1-1-12"
"11-1-1-13"

例如,我需要计算 substring1 的单次出现次数。在这种情况下,有 5 次唯一出现 (1,2,3,10,11)。

"1-X-X-X"
"2-X-X-X"
"3-X-X-X"
"10-X-X-X"
"11-X-X-XX"

真诚地,我不知道我可以从哪里开始。我阅读了文档https://docs.djangoproject.com/en/1.5/ref/models/querysets/但我没有找到具体的线索。

提前致谢。

4

3 回答 3

1
results = MyModel.objects.all()

pos_id = 0

values_for_pos_id = [res.field_to_check.split('-')[pos_id] for res in results]
values_for_pos_id = set(values_for_pos_id)

这是如何运作的:

  • 首先,您获取所有对象(results
  • pos_id是你的子字符串索引(你有 4 个子字符串,所以它在 0 到 3 的范围内)
  • 您在(您的分隔符)上拆分每个field_to_check(又名:存储子字符串组合的位置-)并获取该对象的正确子字符串
  • 您将列表转换为一组(具有所有唯一值)

然后一个简单len(values_for_pos_id)的将为您解决问题

注意:如果你没有pos_id或不能在任何地方设置它,你只需要像这样循环:

for pos_id in range(4):
    values_for_pos_id = set([res.field_to_check.split('-')[pos_id] for res in results])
    # process your set results now
    print len(values_for_pos_id)
于 2013-08-20T13:50:05.903 回答
0

尝试这样的事情......

# Assumes your model name is NumberStrings and attribute numbers stores the string.
search_string = "1-1-2-1"
matched_number_strings = NumberStrings.objects.filter(numbers__contains=search_string)
num_of_occurrences = len(matches_found)
matched_ids = [match.id for match in matched_number_strings]
于 2013-08-20T13:43:02.963 回答
0

您可以遍历这些项目(我猜它们是字符串),并将每个 substring_ n的值添加到 Set_ n

由于集合值是唯一的,因此您将有一个集合,称为Set_1,例如,它包含 1、2、3、10、11。

说得通?

于 2013-08-20T13:45:51.100 回答