class Tags(models.Model): name = models.CharField(_(u'标签'), max_length=255) excerpt = models.TextField(_(u'简介')) class Topic(models.Model): title = models.CharField(_(u'标题'), max_length=255) body = models.TextField(_(u'内容')) tags = models.ManyToManyField('Tags', verbose_name = _(u'标签'), blank = True)
如果 tags 都是词语,如:高高兴兴 高大 很高 趾高气扬 高见 发高烧 挑高球 三高 升高 对应:tags.name
topic 是单个字:高 对应:topic.title
怎么样 给 tags 排序 分别挑出 高(topic.title) 开头的词 , 高在中间的词, 高在末尾的词?
如下代码是想挑出 字高 开头的词语。并不成功!!
tagslist = topic.tags.all() index_list = [] for a, b in enumerate(tagslist): if str(b).find(str(topic.title))==0: index_list.append(b) context['index_list'] = index_list
差不多就是要实现下面这个功能
有什么好办法实现吗?
![]() | 1 Vegetable 2020-04-29 23:23:42 +08:00 https://docs.djangoproject.com/en/3.0/ref/models/querysets/#startswith 开始 https://docs.djangoproject.com/en/3.0/ref/models/querysets/#endswith 结束 在中间的这个有点不太好处理,前两个本质上都是 ```SQL SELECT ... WHERE headline LIKE '%Lennon'; ``` 你可以考虑直接使用 https://docs.djangoproject.com/en/3.0/ref/models/querysets/#regex 正则表达式 |
2 Hstar 2020-04-29 23:25:37 +08:00 这帖子看得一头雾水,标题是按字排序,内容是如何关键词筛选。 如果是你文中的问题,就是楼上的方法。 |
3 python30 OP |
4 python30 OP @Vegetable @Hstar ``` class Topic(models.Model): title = models.CharField(_(u'标题'), max_length=255) body = models.TextField(_(u'内容')) tags = models.ManyToManyField('Tags', verbose_name = _(u'标签'), blank = True) #这写法取不到值 def get_list_index(self): print (self.tags.filter(name__startswith=str(self.title))) return self.tags.filter(name__startswith=self.title) #这样写也不对 def get_index(self): print (Tags.objects.filter(name__startswith=str(self.title))) return Tags.objects.filter(name__startswith=self.title) ``` 把上面的函数写在 views.py 也是取不到值 是写法不对还是取不到中文字符? |