棉花糖:如何为我的模式编写代码以接受不在表中但用于过滤的字段?

时间:2019-09-11 20:31:46

标签: api flask-sqlalchemy flask-restful marshmallow

我想制作一个可以接受两个日期参数并返回数据库表中所有结果的API。我不希望这些日期存储在任何地方,因此无法将它们定义为列。我的表有三列:id(int),answers(json),datestamp(DateTime)。我想在API请求中传递“ start_date”和“ end_date”变量,并具有该时期的所有答案和ID。我的日期从字符串的转换很好,但是我一直受到{“ _schema”:[“无效的输入类型。”]}的响应。即使表中不存在这些字段,也可以传递这些字段吗?我是否需要像在模型中完成列那样定义它们?如果是这样,而不是Column(...),那会是什么?

我尝试了“ additional_properties = fields.Raw()”,但仍然收到无效的输入类型错误。我玩过该架构,但似乎缺少了一些东西。

模式

from ma import ma # marshmallow
from models.c_bulk import CBulkModel
from flask_restful import fields
class CBulkSchema(ma.ModelSchema):
    class Meta:
        additional properties = fields.Raw()
        model = ClaraBulkModel
        dump_only = ("id", "answers", "datestamp")

型号

from typing import List
from datetime import timedelta
from db import db


class CBulkModel(db.Model):
    __tablename__ = "test_post_date"
    datestamp = db.Column(db.DateTime, nullable=False)
    id = db.Column(db.BigInteger, nullable=True, unique=True, primary_key=True)
    answers = db.Column(db.JSON, nullable=True)
    @classmethod
    def find_all(cls, start_date, end_date): # -> List["CBulkModel"]:
        return cls.query.filter(db.and_(start_date >= cls.datestamp, end_date < cls.datestamp))

{“ _ schema”:[“无效的输入类型。”]},而不是那时的调查。

2 个答案:

答案 0 :(得分:0)

好吧,我想我知道了。为了使最终解决方案正常工作,还有更多代码更改,但是通过不传入JSON解决了输入问题。如果您不通过架构传递JSON,则可以加载任何属性并将其用作过滤器。

答案 1 :(得分:0)

尝试添加未知=包含..希望有帮助...

enter code herefrom ma import ma # marshmallow
from models.c_bulk import CBulkModel
from flask_restful import fields
class CBulkSchema(ma.ModelSchema):
    class Meta:
        additional properties = fields.Raw()
        model = ClaraBulkModel
        dump_only = ("id", "answers", "datestamp")
        unknown = INCLUDE