Как прекратить создавать новые вложенные строки во время загрузки - PullRequest
2 голосов
/ 07 мая 2019

Я сериализую / десериализую свои данные с помощью зефира-sqlalchemy.

Когда я пытаюсь десериализовать следующие данные (Model2 с id = 1 присутствует в базе данных, а id = 2 нет), десериализатор пытается создать новую строку для id = 2. Как я могу изменить это поведение, чтобы добавить ошибку, если данный идентификатор models2 отсутствует в базе данных?

Пример ввода:

input = {
    "id": 1,
    "models2": [{"id": 1}, {"id": 2}]
}

Мои модели:

class Model1(db.Model):
    __tablename__ = 'model1'

    id = db.Column(db.Integer, primary_key=True)
    models2 = relationship('Model2', secondary='Model1Model2', backref='models1')

class Model1Model2(db.Model):
    __tablename__ = 'model1_model2'

    id = db.Column(db.Integer, primary_key=True)
    model1_id = db.Column(Integer, ForeignKey('model1.id', ondelete='CASCADE'))
    model2_id = db.Column(Integer, ForeignKey('model2.id'))

class Model2(db.Model):
    __tablename__ = 'model2'

    id = Column(Integer, primary_key=True)
    name = Column(String)

Мои схемы:

class BaseSchema(ModelSchema):
    class Meta:
        sqla_session = SESSION


class Model2Schema(BaseSchema):
    class Meta(BaseSchema.Meta):
        model = Model2
        dump_only = ('name',)


class Model1Schema(BaseSchema):
    class Meta(BaseSchema.Meta):
        model = Model1
        fields = ('id', 'name')

    models2 = Nested(Model2Schema, many=True, only=('id'))

...