Я создаю приложение, используя Python / Flask / SQLAlchemy / Marshmallow, где существует отношение M: M между «Пользователем» и «Сообществом». Это отношение моделируется с помощью таблицы ассоциации, поскольку мне нужно сохранить некоторые основные метаданные c.
Проблема, с которой я сталкиваюсь, заключается в том, что данные для объекта "Сообщество" не отображаются. Как это исправить?
Ниже мой код: Вот мой класс пользователя:
class User(db.Model):
__tablename__ = "User"
user_id = db.Column(db.Integer, primary_key=True)
first_name = db.Column(db.String)
last_name = db.Column(db.String)
email = db.Column(db.String)
created_at = db.Column(db.DateTime, default=datetime.utcnow)
updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
Вот мой класс сообщества:
class Community(db.Model):
__tablename__ = "Community"
community_id = db.Column(db.Integer, primary_key=True)
community_name = db.Column(db.String)
community_description = db.Column(db.String)
created_at = db.Column(db.DateTime, default=datetime.utcnow)
updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
А вот моя таблица ассоциации:
class UserCommunityAssociation(db.Model):
__tablename__ = "UserCommunityAssociation"
user_id = db.Column('user_id', db.Integer, db.ForeignKey('User.user_id'), primary_key=True)
community_id = db.Column('community_id', db.Integer, db.ForeignKey('Community.community_id'), primary_key=True)
db.Column(db.DateTime, default=datetime.utcnow)
community = db.relationship("Community")
user = db.relationship("User")
Я использую следующие две модели:
class UserSchema(ma.ModelSchema):
class Meta:
model = User
sqla_session = db.session
communitys = fields.Nested("CommunitySchema", many=True)
class CommunitySchema(ma.ModelSchema):
class Meta:
model = Community
sqla_session = db.session
Позже в моем коде я выполняю запрос и пытаюсь получить вывод как таковой:
user = User.query \
.join(UserCommunityAssociation)\
.join(Community) \
.filter(User.user_id == UserCommunityAssociation.user_id) \
.filter(User.user_id == user_id) \
.first()
if user is not None:
user_schema = UserSchema()
return user_schema.dump(user)
I хотел бы получить вывод, такой как:
[
{
"created_at": "string",
"email": "string",
"first_name": "string",
"last_name": "string",
"communities": [
{
"created_at": "string",
"community_description": "string",
"community_id": 0,
"community_name"": "string",
"updated_at": "string"
}
],
"updated_at": "string",
"user_id": 0
}
]