Flask模型声明含日期字段的表时触发TypeError错误求助
问题分析与解决方案
错误原因
触发TypeError的根本原因是**nullable=False参数的位置错误**:在Received_by字段中,你将nullable=False作为db.ForeignKey的参数传入,但SQLAlchemy的ForeignKey并不支持该参数,nullable是db.Column的配置选项,需放在db.Column的参数列表里。
另外,你的Received_date字段写法是正确的,db.func.today()可以正确生成日期类型的默认值,无需修改。
修正后的代码
from .database import db from datetime import datetime class DonationRequests(db.Model): __tablename__ = 'donationrequests' Req_id = db.Column(db.Integer, autoincrement=True, primary_key=True, nullable=False) Received_date = db.Column(db.Date, default=db.func.today(), nullable=False) Received_from = db.Column(db.Text, db.ForeignKey('Users.username', ondelete='CASCADE'), nullable=False) Req_status = db.Column(db.Text, default='pending') # 修正:将nullable=False从ForeignKey移到Column的参数中 Received_by = db.Column(db.Integer, db.ForeignKey('Bloodbank.bank_id', ondelete='CASCADE'), nullable=False) Response_date = db.Column(db.Date, nullable=True) rejected_msg = db.Column(db.Text, nullable=True)
关键修改说明
- 针对
Received_by字段:把原本写在db.ForeignKey括号内的nullable=False移到db.Column的参数列表中,与ForeignKey同级。 - 保留
Received_date的写法:db.func.today()会根据数据库方言生成对应的日期默认值,符合你仅存储日期的需求。
内容的提问来源于stack exchange,提问作者HS077
相关产品推荐
相关产品推荐

