为要在flask中封送的模型选择筛选的嵌套外键
我有一个带有相关外键问题的问卷模型(名为瓶子),并有与问题模型相关的答案模型为要在flask中封送的模型选择筛选的嵌套外键,flask,flask-sqlalchemy,flask-restful,Flask,Flask Sqlalchemy,Flask Restful,我有一个带有相关外键问题的问卷模型(名为瓶子),并有与问题模型相关的答案模型 class Bottle(BaseModel): b_name = db.Column(db.String(8)) questions = db.relationship('Question', backref='bottle') is_deleted = db.Column(db.Boolean(), default=False) class Question(BaseModel):
class Bottle(BaseModel):
b_name = db.Column(db.String(8))
questions = db.relationship('Question', backref='bottle')
is_deleted = db.Column(db.Boolean(), default=False)
class Question(BaseModel):
q_name = db.Column(db.String(32))
q_index = db.Column(db.Integer())
answers = db.relationship('Answer', backref='question')
q_bottle = db.Column(db.ForeignKey(Bottle.id))
is_deleted = db.Column(db.Boolean(), default=False)
class Answer(BaseModel):
a_index = db.Column(db.Integer())
a_name = db.Column(db.String(32))
a_score = db.Column(db.Integer())
a_question = db.Column(db.ForeignKey(Question.id))
is_deleted = db.Column(db.Boolean(), default=False)
在flask restful中,我希望将问卷数据回复为json,因此
answer_fields = {
"id": fields.Integer,
"a_name": fields.String,
"a_score": fields.Integer,
"a_index": fields.Integer
}
question_fields = {
"id": fields.Integer,
"q_name": fields.String,
"q_index": fields.Integer,
"answers": fields.Nested(answer_fields)
}
bottle_fields = {
"questions": fields.Nested(question_fields),
"b_name": fields.String,
}
single_bottle_fields = {
"data": fields.Nested(bottle_fields),
"status": fields.Integer,
"msg": fields.String,
"request_time": fields.String
}
class BottleResource(Resource):
@marshal_with(single_bottle_fields)
def get(self, id):
bottle = Bottle.query.get(id)
data = {
"status": 201,
"msg": "Well Done!",
"data": bottle,
"request_time": request_time
}
return data
我想得到一个瓶子,里面有问题,他们的答案是假的
但是marshal_with的结果将返回模型及其嵌套模型的所有外键。所以我会买一瓶,里面有所有相关的问题。我只想要被删除的问题=false和它们被删除的答案=false,因为答案是嵌套在问题中的,所以也许我不能只写一个def来重写问题的答案属性
我怎样才能得到一个瓶子,里面只有被删除的问题是假的,而被删除的问题的答案也是假的
谢谢大家! 我已经找到了解决这个问题的方法。关键是炼金术!您可以为问题创建属性:``确定问题=db.relationship(“问题”,primaryjoin=”和`(battle.id==question.q\u-battle”,“question.is\u deleted!=1)”```然后您可以只封送确定问题,而不封送瓶子字段中的问题。因为您将获得模型的选择性外键。我已经找到了解决此问题的方法。关键是炼金术!您可以为问题创建属性:``确定问题=db.relationship(“问题”,primaryjoin=”和`(battle.id==question.q\u-battle”,“question.is\u deleted!=1)”```然后您可以只封送确定问题,而不封送瓶子字段中的问题。因为您将获得模型的选择性外键。