0

我需要快速查找我在 Django 中编写的 Web 应用程序的单词。我正在考虑将单词的每个字符放在它自己的整数字段中,按位置索引。

class Word(models.Model):
    word = models.CharField(max_length=5)
    length = models.IntegerField()

    c0 = models.IntegerField(blank=True, null=True)
    c1 = models.IntegerField(blank=True, null=True)
    c2 = models.IntegerField(blank=True, null=True)
    c3 = models.IntegerField(blank=True, null=True)
    c4 = models.IntegerField(blank=True, null=True)

    mapping = [c0, c1, c2, c3, c4,]

    def save(self):
        self.length = len(self.word)
        for (idx, char) in enumerate(self.word):
            self.mapping[idx] = ord(char)
        models.Model.save(self)

然后我可以进行查询,例如Word.objects.filter(length=4, mapping[2]=ord('A'))查找所有长度为 4 且第三个位置为 A 的单词。

我不太确定设计和一些机制,所以我想在去尝试实施它之前我会在这里征求建议。我不完全确定进行查询的语法。

所以,我想问题是

  1. 您对设计有什么建议吗?
  2. mapping[2]工作吗?
  3. 我是否能够将字典传递给过滤器命令,以便我可以拥有可变数量的关键字参数?

谢谢!

4

1 回答 1

0

映射[2] 会起作用吗?

不,它不会。

我是否能够将字典传递给过滤器命令,以便我可以拥有可变数量的关键字参数?

当然。例如:

conditions = dict(word__startswith = 'A', length = 5)
Word.objects.filter(**conditions)

会找到所有Word以 和 开头的实例A,长度为 5 个字符。

您对设计有什么建议吗?

这对我来说就像是过早优化的情况。我怀疑对于中等数量的数据,您应该能够将合适的数据库功能与 Django 的过滤器结合起来以获得您需要的东西。

例如:

找出所有长度为 4 且第三个位置为 A 的单词。

您可以将 Django 过滤器与 (Postgresql's) 结合使用strpos

contains, position = 'A', 3
where = ["strpos(word, '%s') = %s" % (contains, position)]
Word.objects.filter(length = 4, word__contains = contains).extra(where = where)
于 2010-09-11T07:13:48.317 回答