Отказаться от колонок моделей от сериализации - PullRequest
0 голосов
/ 08 мая 2019

Я использую Flask, Flask-SqlAlchemy, Flask-Marshmallow и Marshmallow-SqlAlchemy среди других сред для создания приложения. У меня есть, например, следующие классы модели и схемы. Мне нужно отказаться от определенных полей для сериализации в JSON. Как мне этого добиться?

Модель:

class AsmStore(Model):
      __tablename__ = "asmstore"
      id = db.Column(db.Integer, primary_key=True)
      name = db.Column(db.String(255))
      storelatitude = db.Column(db.String(255))
      storelongitude = db.Column(db.String(255))
      territoryid = db.Column(
           db.Integer, db.ForeignKey("territory.id"), nullable=False
      )

Класс схемы:

class AsmStoreSchema(ma.ModelSchema):
      class Meta:
            model = AsmStore

Я провел небольшой поиск и попробовал следующее, но при таком подходе сериализация не работает, если, скажем, AsmStoreSchema вложена в другой класс схемы.

class AsmStoreSchema(ma.Schema):
      class Meta:
            fields = ("storelatitude", "storelongitude")

Я попробовал это сегодня, и это сработало. Хотя будет хорошо, если это можно будет подтвердить, это правильный подход.

Наряду с наследованием от ModelSchema и указанием модели в мета-классе я также указал поля для сериализации. Вот несколько примеров:

class AsmStoreSchema(ma.ModelSchema):
      class Meta:
            model = AsmStore
            fields = ("storelatitude", "storelongitude")

class TerritorySchema(ma.ModelSchema):
      class Meta:
            model = Territory
            fields = ("id", "centrallatitude", "storelist")
...