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) 中提到的内容。
我目前正在制作一个网站,但在向用户展示 {{ 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) 中提到的内容。