Django中的字数统计查询

sha*_*ker 1 django words character count

给定一个包含Boolean和TextField字段的模型,我想做一个查询,找到符合某些条件的记录,并在TextField中包含多于"n"个单词.这可能吗?例如.:

class Item(models.Model):

    ...    
    notes = models.TextField(blank=True,)
    has_media = models.BooleanField(default=False)
    completed = models.BooleanField(default=False)
    ...
Run Code Online (Sandbox Code Playgroud)

这很简单:

items = Item.objects.filter(completed=True,has_media=True)
Run Code Online (Sandbox Code Playgroud)

但是如何过滤"注释"字段超过25个单词的那些记录的子集?

Ben*_*end 5

试试这个:

Item.objects.extra(where=["LENGTH(notes) - LENGTH(REPLACE(notes, ' ', ''))+1 > %s"], params=[25])
Run Code Online (Sandbox Code Playgroud)

此代码使用Django的extraqueryset方法添加自定义WHERE子句.该WHERE子句中的计算基本上计算"空格"字符的出现,假设所有单词都以一个空格字符作为前缀.在第一个单词的结果帐户中添加一个.

当然,这个计算只是真实字数的近似值,所以如果必须精确,我会用Python做单词计数.