Flask selfreferential 多对多关系,如何防止引用中的重复

问题描述 投票:0回答:0

我正在开发一个管理包含笔记的数据库的 Flask 应用程序。这些注释可以相互引用。使用表注意的自引用多对多关系可以正常工作,但现在我试图防止用户重复引用。我想我应该这样写:“如果您要创建的引用已经存在,请显示一条消息并重定向到您来自的页面。”我已经为此寻找过例子,但我没有找到它们,而且我自己的努力似乎没有用。

这是我的模型:

from datetime import datetime
from app import db

references = db.Table('references',
    db.Column('refers_id', db.Integer, db.ForeignKey('note.id')),
    db.Column('is_referred_id', db.Integer, db.ForeignKey('note.id')))

class Note(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(140), index=True, unique=True)
    timestampCr = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    content = db.Column(db.Text)
    external_source = db.Column(db.String(300))
    internal_document = db.Column(db.String(300))
    timestampRe = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    timestampUp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    category = db.Column(db.Boolean, default=False, nullable=False)
    referred = db.relationship(
        'Note', secondary=references,
        primaryjoin=(references.c.refers_id == id),
        secondaryjoin=(references.c.is_referred_id == id),
        backref=db.backref('references', lazy='dynamic'), lazy='dynamic')
  
    def __repr__(self):
        return '[Note] {}' .format(self.title)

这里的观点: `

@app.route("/addref/<id>", methods=['GET', 'POST'])
def addref(id):
    form = RefNoteForm()
    noteref = Note.query.filter_by(id=id).first_or_404()
    if form.validate_on_submit():
       refnote = form.opts.data
       if refnote==noteref: 
           flash ('A note can´t refer to itself')
           return redirect(url_for('readnote', id=id))
       noteref.referred.append(refnote)
       db.session.commit()
       return redirect(url_for('readnote', id=id))
    return render_template('addref.html', form=form, id=id)`

我试着插入之间

       if refnote==noteref: 
           flash ('A note can't refer to itself')
           return redirect(url_for('readnote', id=id))

   noteref.referred.append(refnote)
  

Something like:


   if noteref.referred(refnote: 
       flash ('This reference already exists')
       return redirect(url_for('readnote', id=id))
And all kinds of syntactical variations but I can't get it working.
What is the right syntax for what I am trying to do or should I approach the problem in a different way?
flask flask-sqlalchemy
© www.soinside.com 2019 - 2024. All rights reserved.