Я пытаюсь добавить поле "slug" в мой класс db.Model Post, в котором оно берет заголовок сообщения и возвращает его в более удобном формате для URL.
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(64), index=True, unique=True)
body = db.Column(db.Text)
timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
def __repr__(self):
return '<Post {}>'.format(self.title)
@hybrid_property
def slug(self):
result = []
punct_re = re.compile(r'[\t !"#$%&\'()*\-/<=>?@\[\\\]^_`{|},.]+')
for word in punct_re.split(self.title.lower()):
if word:
result.append(word)
return '-'.join(result)
Я могу ссылаться на слаг с помощью Post.slug, но когда я пытаюсь сделать запрос к нему, как Post.query.filter_by (slug = 'test-slug-1'), я получаю сообщение
sqlalchemy.exc.InvalidRequestError: Entity <class 'app.models.Post'> has no property 'slug'
Из того, что я понимаю, мне нужно гибридное выражение, но примеры, которые я видел, сделали его более запутанным. Любые идеи о том, как фильтровать по слаге гибридного свойства, или я собираюсь создать этот слаг неправильно?