[pyar] Consulta flask+sqlalchemy+tagging

Claudio claudiobidau en gmail.com
Vie Mayo 25 18:19:08 ART 2012


Hola amigos
Estoy intentando implementar un sistema simple de tags pero se me complica
el tema de los "tags duplicados".
Tengo el siguiente modelo (bienvenidas sugerencias de mejoras):

tags = db.Table('tags',
  db.Column('tag_id', db.Integer, db.ForeignKey('tag.id')),
  db.Column('post_id', db.Integer, db.ForeignKey('post.id'))
)

class Post(db.Model):
  id = db.Column(db.Integer, primary_key=True)
  titulo = db.Column(db.String(80))
  cuerpo = db.Column(db.String(120))
  pub_date = db.Column(db.DateTime(), default=datetime.utcnow)

  tags = db.relationship('Tag', secondary=tags, backref=db.backref('posts',
lazy='dynamic'))

  def __init__(self, *args, **kwargs):
    super(Post, self).__init__(*args, **kwargs)

  def __repr__(self):
    return self.titulo

  def get_pub_date(self):
    return self.pub_date

class Tag(db.Model):
  id = db.Column(db.Integer, primary_key=True)
  name = db.Column(db.String(100), unique=True, nullable=False)

  def __init__(self, *args, **kwargs):
    super(Tag, self).__init__(*args, **kwargs)

  def __repr__(self):
    return self.name

En la consola:
p = Post(titulo='bla', cuerpo='bla')
p.tags = [Tag(name='uno'), Tag(name='dos')]
db.session.add(p)
db.session.commit(p)

-- hasta acá todo bien, persiste el post, los 2 tags y crea la relación

p2 = Post(titulo='bla2', cuerpo='lorem')
p2.tags = [Tag(name='uno'), Tag(name='tres')]

db.session.add(p2)
db.session.commit(p2) // explota todo, porque intenta crear el tag "tres"
que ya existe :S

Leí en la documentación sobre el metodo merge, pero no se como hacerlo
funcionar.

Saludos y muchas gracias!

Claudio

PD: es mi primer desarrollo en python :P
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20120525/5377a4d4/attachment.html>


More information about the pyar mailing list