1

クラス Post があり、キャプション フィールドとタグ フィールドがあるとします。

post_save シグナルでは、キャプションでハッシュタグを見つけて、タグ フィールドにカンマ区切りで保存したいと考えています。どうやってやるの?

4

2 に答える 2

1

再帰を回避するには、インスタンスを保存できるように、シグナルハンドラーを切断して再接続する必要があります。

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)
于 2012-08-01T00:53:31.043 に答える
0

これには正規表現を使用できます

>>> import re
>>> s = 'some #example #post caption'
>>> m = re.findall('(?:#([^\s]+))+', s)
>>> m
['example', 'post']
>>> ', '.join(m)
'example, post'
于 2012-07-31T23:22:50.580 に答える