Django:当对象的post_save时,如何从字符串中获取主题标签?

时间:2012-07-31 22:21:11

标签: django

假设我有一个Post类,它有标题和标签字段。

在post_save信号中,我想在标题中找到标签并保存到标签字段逗号分隔。我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

您可以将regular expressions用于此

>>> import re
>>> s = 'some #example #post caption'
>>> m = re.findall('(?:#([^\s]+))+', s)
>>> m
['example', 'post']
>>> ', '.join(m)
'example, post'

答案 1 :(得分:0)

为避免递归,您必须断开连接并重新连接信号处理程序,以便保存实例。

from django.db.models.signals import post_save
from myapp.models import Post

def parse_hash_tags(sender, instance, created, **kwargs):
    post_save.disconnect(parse_hash_tags, sender=Post)
    instance.tags = ','.join(re.findall(r'(?:#(\w+))', instance.caption))
    instance.save()
    post_save.connect(parse_hash_tags, sender=Post)

post_save.connect(parse_hash_tags, sender=Post)