为了澄清,我并没有要求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()))