0

私はブログのようなアプリケーションを作成しています。編集可能なタグを持つ記事が必要で、タグを削除すると記事の変更も反映されます。Flask-SQLAlchemy と PostgresSQL を使用しています。

たくさん検索してみましたが、何も見つかりませんでした。また、ドキュメントに記載されている内容にも完全に従っていませんでした。( http://pythonhosted.org/Flask-SQLAlchemy/models.html#many-to-many-relationships )

tags = db.Table('tags',
    db.Column('tag_id', db.Integer, db.ForeignKey('tag.id')),
    db.Column('page_id', db.Integer, db.ForeignKey('page.id'))
)

class Page(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    tags = db.relationship('Tag', secondary=tags,
        backref=db.backref('pages', lazy='dynamic'))

class Tag(db.Model):
    id = db.Column(db.Integer, primary_key=True)

しかし、これにより、多対多の関係を使用する必要があると思います。誰か説明してくれませんか?ありがとう!

4

1 に答える 1

0

元のコードは正しく、同様のものが機能します。これがmodels.pyになる場合

db = SQLAlchemy(app)

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)
    title = db.Column(db.String(100), index=True, unique=True)
    body = db.Column(db.String(500), index=True)
    tags = db.relationship('Tag', secondary=tags,
        backref=db.backref('posts', lazy='dynamic'))

    def __repr__(self):
        return '<Post %r %r>' % (self.title, self.tags)

class Tag(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(50), index=True, unique=True)

    def __repr__(self):
        return '<Tag %r>' % (self.name)

タグには models.Post.tags としてアクセスできます。これは、タイプListのすべての要素を含むタイプmodels.Tagになるため、簡単に使用できます。

于 2013-08-16T17:54:17.303 に答える