Django优雅的方式来查询字符串字段是字符串的子字符串

时间:2017-01-28 01:31:16

标签: python django

为了澄清,我并没有要求Article.objects.filter(headline__in=['Doge', 'Cat', 'Lizard'])而是我想反过来做。有点像这个逻辑

q = Q()
for word in headline.split():
    q |= Q(keywords__keyword__icontains=word)
KeywordSubscription.objects.filter(q).all()

类似的东西。我不确定是否有快捷方式或某种功能可以让我访问我需要的内容。

输入: '猫正在接管世界!'

我的表是用户和关键字(多对多字段)之间的映射:

class KeywordSubscription(models.Model):
    user = models.OneToOneField(User, unique=True)
    keywords = models.ManyToManyField(Keyword)
    objects = KeywordSubscriptionManager()


class Keyword(models.Model):
    keyword = models.CharField(max_length=128)

每个用户都可以订阅几个关键字,例如,假设user_0订阅了cat,而user_1订阅了dog,上面的查询将会循环播放:[' Cats', ''''''''''''''''''''''''他们订阅了这些词中的任何一个

澄清2:代码有效,但它并不优雅。

编辑:

它看起来像是这样

query = reduce(operator.or_, (Q(keywords__keyword__iexact=word) for word in instance.headline.split()))

0 个答案:

没有答案