SQL 两个模型之间的数据库关系

SQL db relationship between two models

我目前正在制作一个网站,但在向用户展示 {{ patient.name }} 时遇到了一些麻烦,而没有他们自己写。名字可以只用patient.id过滤,如果patient.id和detail.id有相同的id,比如1,那么他们共享相同的名字和信息。 虽然我只是在

中遇到错误

routes.py

@app.route("/add-patient-detail/<int:patient_id>", methods=['GET', 'POST']) 
@login_required  
def add_patient_detail(patient_id): 
    form = DetailForm()   
    if form.validate_on_submit():  
        detail = Detail(detail=patient.id, Symptom=form.Symptom.data,  Initial_diagnosis=form.Initial_diagnosis.data,
        Preliminary_treatment_plan=form.Preliminary_treatment_plan.data, Check_result=form.Check_result.data, 
        Patient_reason=form.Patient_reason.data, Formula=form.Formula.data) # detail=patient.id is the part with error
        db.session.add(detail) 
        db.session.commit() 
        flash('此患者已被加入进数据库当中', 'success') 
        return redirect(url_for('home'))     
    return render_template('add-patient-detail.html', title='Add Patient Detail', form=form)  

models.py

class Patient(db.Model, UserMixin): 
    __bind_key__ = 'patient'
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String(10), nullable=False)
    number = db.Column(db.String(11), unique=False, nullable=False) 
    gender = db.Column(db.String(2), nullable=False) 
    birth = db.Column(db.String(10), nullable=False) 
    IDcard = db.Column(db.String(12), nullable=False) 
    create = db.Column(db.DateTime, nullable=False, default=datetime.now)   
    details = db.relationship('Detail', backref='detail', lazy=True)  

class Detail(db.Model, UserMixin): 
    __bind_key__ = 'detail'
    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String(20), unique=False, nullable=False)
    Symptom = db.Column(db.String(100), nullable=False)
    Initial_diagnosis = db.Column(db.String(50), nullable=False) 
    Preliminary_treatment_plan = db.Column(db.String(100), nullable=False) 
    Check_result = db.Column(db.String(50), nullable=False) 
    Patient_reason = db.Column(db.String(100), unique=False, nullable=False) 
    Formula = db.Column(db.String(100), unique=False, nullable=False)
    Doctor_name = db.Column(db.String(20), unique=False, nullable=False) 
    Date_of_diagnosis = db.Column(db.DateTime, nullable=False, default=datetime.now)  
    patient_id = db.Column(db.Integer, db.ForeignKey('patient.id'), nullable=False)  

我注意到两件事:
1.) 您正在将 patient_detail 传递给端点,patient.id 未在任何地方定义,因此您将无法使用那。
2.) 您的 Detail 模型上没有名为 detail 的列。通过查看您的模型,连接将位于 patient_id 列。
试试这个:

@app.route("/add-patient-detail/<int:patient_id>", methods=['GET', 'POST']) 
@login_required  
def add_patient_detail(patient_id): #NOTE that you're passing patient_id not patient.id
    form = DetailForm()   
    if form.validate_on_submit():  
        detail = Detail(patient_id=patient_id, Symptom=form.Symptom.data,  Initial_diagnosis=form.Initial_diagnosis.data,
        Preliminary_treatment_plan=form.Preliminary_treatment_plan.data, Check_result=form.Check_result.data, 
        Patient_reason=form.Patient_reason.data, Formula=form.Formula.data) # detail=patient.id is now patient_id=patient_id 
        db.session.add(detail) 
        db.session.commit() 
        flash('此患者已被加入进数据库当中', 'success') 
        return redirect(url_for('home'))     
    return render_template('add-patient-detail.html', title='Add Patient Detail', form=form)  

注意我在哪里更改了我在 1) 和 2) 中提到的内容。