Выберите отфильтрованный вложенный внешний ключ для модели для маршалирования в flask - PullRequest
0 голосов
/ 04 апреля 2020

У меня есть модель вопросника (которая называется bottle) с соответствующими вопросами по внешнему ключу, и модель ответов имеет отношение к модели вопроса.

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 -прекрасный Я хочу ответить на вопросник данные для 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

Я хочу получить bottle с вопросами и ответами на них, is_deleted является ложным.

, но результат marshal_with вернет все иностранные ключи для модели и ее вложенной модели тоже. Так что я получу bottle, у которого есть все связанные вопросы. Мне нужны только те вопросы, которые is_deleted == false, и их ответы is_deleted == false, а так как ответы вложены в вопросы, поэтому, возможно, я не могу просто написать def, чтобы переписать атрибут ответа вопроса.

Как я могу получить bottle, в котором есть только вопросы, для которых is_deleted является ложным, а ответы на вопросы, для которых is_deleted тоже ложные?

Спасибо!

...