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 也是取不到值 是写法不对还是取不到中文字符? |