Проблема с Flask API REST и Marshmallow - PullRequest
0 голосов
/ 27 апреля 2020

Я делаю API с микро-фреймворком 'Flask'. В основном, что мне нужно сделать в этом случае - это иметь возможность вставлять данные из сервиса с соответствующими изображениями (галерея). Сервис и галерея - это отдельные модели, поэтому они связаны между собой, то есть сервис может иметь много изображений.

У меня есть Models / service.py:

class Service(db.Model):
    id          = db.Column(db.Integer, primary_key=True)
    service     = db.Column(db.String(80))
    gallery = db.relationship("Gallery")


    def __init__(self, service, gallery):

        self.service        = service
        self.gallery        = gallery


class Gallery(db.Model):
    id          = db.Column(db.Integer, primary_key=True)
    id_service  = db.Column(db.Integer, db.ForeignKey('service.id'))
    image_path  = db.Column(db.String(80))

    def __init__(self, id_service, image_path):

        self.id_service     = id_service
        self.image_path     = image_path


##### SCHEMAS #####

class GallerySchema(ma.Schema):
    class Meta:
        model: Gallery
        fields = ("image_path")
        ordered = True


class ServiceSchema(ma.Schema):

    class Meta:
        model: Service
    id = fields.Integer()
    service = fields.String(required=True)
    gallery = fields.Nested(GallerySchema, many=True) 

И у меня также есть Resources / service.py:

    def get(self):
        services = Service.query.all()
        services = services_schema.dump(services)
        return {'status': 'success', 'data': services}, 200

    def post(self):
        json_data = request.get_json()
        if not json_data:
               return {'status': 'error', 'message': 'No input data provided'}, 400

        # Validate and deserialize input
        try:
            data = service_schema.load(json_data)
        except ValidationError as err:
            return {'status': 'error', 'errors': err.messages}, 422



        service = Service(
            service     = data['service'],          
            gallery  = data['gallery']
            )

        db.session.add(service)
        db.session.commit()

        result = service_schema.dump(service)

        return { 'status': 'success', 'data': result }, 201

Запрос POST в основном:

{           

    "service": "Servicio 1",
    "gallery": [
        {
                   "image_path": "test.png"
        },
         {
                   "image_path": "test.png"
        }
      ]
}

Ответ, когда дело доходит до метода POST, показывает следующую ошибку:

TypeError: unhashable type: 'dict'

Однако ответ, когда дело доходит до метода GET, идеален:

     "service": "Servicio de grifo",
     "gallery": [
             {"image_path": "test.png"},
       ]
   } 

Я действительно не знаю, как создать запись со связанными моделями в одном вложенном JSON.

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

...