Flask Marshmallow - схема, возвращающая атрибут атрибута? - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь вернуть список всех ключевых слов из базы данных, которая выглядит примерно так:

  [
    '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 Ответ

0 голосов
/ 15 ноября 2018

Мой экземпляр для 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])
...