Flask -SQLAlchemy не может обнаружить обратную ссылку в db.session.add () - PullRequest
0 голосов
/ 11 марта 2020

У меня есть 2 таблицы "ident_report "и" ir_owner_card_activity ". «ident_report »[ident_id] имеет отношение« один ко многим »с« ir_owner_card_activity ».

Здесь, кажется, простой вопрос, но я не мог понять, как указать свою обратную ссылку, когда я пытаюсь сделать db.session.add ( backref ) для "ir_owner_card_activity".

Ниже приведен пример моего кода:

admin / __ init __. Py

from flask import Flask, request, session
from flask_sqlalchemy import SQLAlchemy


app = Flask(__name__)
app.config.from_pyfile('config.py')
db = SQLAlchemy(app)

admin / models.py

from admin import db

class IncidentReport(db.Model):
    __tablename__ = "incident_report"

    id = db.Column(UUIDType(binary=False), default=uuid.uuid4, primary_key=True)
    customer_name = db.Column(db.String(120))
    incident_id = db.Column(db.String(120), unique=True)

    customer_activity = db.relationship('IRCustomerActivity', backref='report')

class IRCustomerActivity(db.Model):
    __tablename__ = "ir_owner_card_activity"

    id = db.Column(UUIDType(binary=False), default=uuid.uuid4, primary_key=True)
    tranx_date = db.Column(db.Date)
    amount = db.Column(db.Integer)
    report_id = db.Column(db.String(120), db.ForeignKey(IncidentReport.incident_id))

admin / data.py

from admin import db
from admin.models import IncidentReport, IRCustomerActivity
import datetime

def build_sample_db():
    db.drop_all()
    db.create_all()

    # Create sample IncidentReport
    ir = IncidentReport()
    ir.customer_name = "Jack Ma"
    ir.incident_id = "IR-012345"

    db.session.add(ir)

    # Create sample CustomerAcitivity
    activity = IRCustomerActivity()
    activity.tranx_date = datetime.datetime.now()
    activity.amount = 588

    db.session.add(Activity, report=ir.customer_name)

    db.session.commit()
    return

run_server.py

from admin import app
from admin.data import build_sample_db
import os
import os.path as op

# Build a sample db on the fly, if one does not exist yet.
app_dir = op.join(op.realpath(os.path.dirname(__file__)), 'admin')
database_path = op.join(app_dir, app.config['DATABASE_FILE'])
if not os.path.exists(database_path):
    build_sample_db()

# Start app
app.run(debug=True)

Отображается ошибка:

TypeError: add () получил неожиданный аргумент ключевого слова 'report'

Я понимаю, что "report" в admin / data.py не может быть идентифицирован как backref из admin / models.py , но могу ли я узнать, как мне указать на обратную ссылку?

...