首页 > 解决方案 > 为模型选择过滤的嵌套外键以在烧瓶中编组

问题描述

我有一个带有相关外键问题的问卷模型(名为瓶子),并且有与问题模型相关的答案模型。

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

我想得到一瓶有问题的瓶子,他们的答案 is_deleted 是假的。

但是 marshal_with 的结果也将返回模型及其嵌套模型的所有外键。所以我会得到一个瓶子,里面有所有相关的问题。我只想要is_deleted == false的问题及其is_deleted == false的答案,并且由于答案嵌套在问题中,所以也许我不能只写一个def来重写问题的答案属性。

我怎样才能得到一个瓶子,只有他们的 is_deleted 为假的问题和他们的 is_deleted 的问题的答案也是假的?

谢谢!

标签: flaskflask-sqlalchemyflask-restful

解决方案


推荐阅读