Flask Schema не использует все данные, переданные ей
Позвольте мне немного вернуться назад. Проблема на самом деле происходит при инициализации Mentor с использованием имеющейся у нас MentorSchema:
class Mentor(db.Model):
__tablename__ = 'mentors'
id = db.Column(db.Integer, primary_key=True)
id_project42 = db.Column(db.Integer, db.ForeignKey('projects.id'), nullable=False)
id_user42 = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
finalmark = db.Column(db.Integer, nullable=False, server_default=0)
totalappointments = db.Column(db.Integer, nullable=False, server_default=0)
def __init__(self, id_project42, id_user42, finalmark):
self.id_project42 = id_project42
self.id_user42 = id_user42
self.finalmark = finalmark
self.totalappointments = 0
class MentorSchema(ma.ModelSchema):
class Meta:
model = Mentor
Так что если у меня есть d = { "id_project42": 101, "id_user42": 57, "finalmark": 86}
и я пытаюсь mentor_schema.dump(d)
затем id_project42 и id_user42 исчезают, и я получаю сообщение об ошибке, сообщающее, что:TypeError: __init__() missing 2 required positional arguments: 'id_project42' and 'id_user42'
Фактический код, который мы используем, находится здесь:
class ApiUserInit(Resource):
def post(self, userId):
data = Api42.userProjects(userId) # Returns a list of dicts
if data is None:
return formatError('Error', 'No projects found for user')
for d in data:
print(d) # prints {"id_project42": 101, "id_user42": 57, "finalmark": 86}
mentor_schema = MentorSchema()
newMentor, errors = mentor_schema.load(d) # Only loading the "finalmark"!!!!!!
if errors:
return internalServiceError()
db.session.add(newMentor)
db.session.commit()
return {"status":"mentor initialization successful"}, 201
Пожалуйста, дайте мне знать, если есть проблема с тем, как я использую Схему.
1 ответ
По умолчанию внешние ключи не будут включены при вызове метода дампа вашей схемы. Вам нужно установить include_fk = True
на вашей схеме Meta
учебный класс:
class MentorSchema(ma.ModelSchema):
class Meta:
model = Mentor
include_fk = True
Дополнительная информация: ссылка на API-интерфейс marshmallow-sqlalchemy