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) 

但是,這使我想到我將不得不使用許多一對多的關係。有人可以解釋嗎?謝謝!

回答

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 ,這將是包含models.Tag類型,這樣可以很容易地使用的所有元素類型List的。