class Post(SQLObject,URIAccess): class sqlmeta: defaultOrder = "-created" tags = RelatedJoin("Tag") name = StringCol(length=60,alternateID=True) text = StringCol() created = DateTimeCol(default=sqlbuilder.func.NOW(),notNone=False) modified = DateTimeCol(default=sqlbuilder.func.NOW(),notNone=False) reply_count = IntCol(default = 0) comments = MultipleJoin("Comment",joinColumn='post_id') user = ForeignKey("User") related = RelatedJoin("Post", intermediateTable="related_post", otherColumn="related_id") def _get_tagNames(self): return " ".join([tag.name for tag in self.tags]) def _set_tagNames(self,value): oldTags = self.tags if value: newTagNames = value.split(" ") else: newTagNames = [] # remove tags that are no longer for the post for tag in oldTags: if not tag.name in newTagNames: self.removeTag(tag) # remove already existing tags from new tag list for tag in self.tags: if tag.name in newTagNames: newTagNames.remove(tag.name) # create and/or add new tags for name in newTagNames: tags = list(Tag.selectBy( name = name)) if len(tags) == 0: tag = Tag(name = name) else: tag = tags[0] self.addTag(tag)