代码之家  ›  专栏  ›  技术社区  ›  spitfiredd

flask marshmallow-返回属性错误的架构?

  •  0
  • spitfiredd  · 技术社区  · 6 年前

    我正试图从数据库中返回所有关键字的列表,这些关键字看起来像

      [
        'foo',
        'bar',
        'baz',
      ]
    

    模型

    class Keyword(db.Model, SurrogatePK):
        __tablename__ = 'keywords'
        keyword = Column(db.Text, nullable=False, unique=True)
    
        def __repr__(self):
            """Represent instance as a unique string."""
            return '<Keyword({keyword})>'.format(keyword=self.keyword)
    

    图式

    class KeywordSchema(ma.ModelSchema):
        class Meta:
            model = Keyword
    

    然后,

    keywords_schema = KeywordSchema(many=True, only='keyword')
    

    路线

    class Keywords(Resource):
        def get(self):
            '''Head to http://localhost:5000/api/v1/keywords
    
            Returns a list of all keywords.
    
            '''
            keywords = Keyword.query.all()
            result = keywords_schema.dump(keywords)
            return jsonify({'keywords': result})
    

    这是在抛出“attributeError”

    部分跟踪

    File "C:\Users\ddonovan\DHG\web\flask-research\Query-Metadata\metadata\views.py", line 33, in get
        result = keywords_schema.dump(keywords)
      File "c:\users\ddonovan\.edm\envs\flask\lib\site-packages\marshmallow\schema.py", line 491, in dump
        self._update_fields(processed_obj, many=many)
      File "c:\users\ddonovan\.edm\envs\flask\lib\site-packages\marshmallow\schema.py", line 760, in _update_fields
        ret = self.__filter_fields(field_names, obj, many=many)
      File "c:\users\ddonovan\.edm\envs\flask\lib\site-packages\marshmallow\schema.py", line 834, in __filter_fields
        '"{0}" is not a valid field for {1}.'.format(key, obj))
    AttributeError: "w" is not a valid field for <Keyword(numpy)>
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   spitfiredd    6 年前

    我的keywordschema实例需要 keywords_schema = KeywordSchema(many=True, only=['keyword'])

    然后在我的终点

    class Keywords(Resource):
        def get(self):
            '''Head to http://localhost:5000/api/v1/keywords
    
            Returns a list of all keywords.
    
            Example Output:
    
            [
                "foo",
                "bar",
                "baz"
            ]
    
            '''
            keywords = Keyword.query.all()
            result = keywords_schema.dump(keywords)
            return jsonify([d['keyword'] for d in result.data])