Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为要在flask中封送的模型选择筛选的嵌套外键_Flask_Flask Sqlalchemy_Flask Restful - Fatal编程技术网

为要在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)”```然后您可以只封送确定问题,而不封送瓶子字段中的问题。因为您将获得模型的选择性外键。