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

Другие вопросы по тегам