Я сериализую / десериализую свои данные с помощью зефира-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'))