Бит noob с SQLAlchemy (и Python, хотя и менее).ошибка атрибута атрибута «один ко многим»
Невозможно разобрать отношения между моделями Post и Picture. Почтовые объекты должны иметь список под названием «галерея», список связанных объектов изображения. Также есть «обложка» «Почта», отдельное изображение, выбранное в качестве обложки галереи. Я также пытаюсь использовать OrderingList для сохранения порядка картинок в галерее.
При попытке добавить фотографии к post.gallery на мой взгляд он бросает следующее:
AttributeError: 'NoneType' object has no attribute 'append'
Вот модели:
class Post(db.Model):
__tablename__ = 'posts'
id = db.Column(db.Integer, primary_key=True)
cover_id = db.Column(db.Integer, db.ForeignKey('pictures.id',
use_alter=True, name='fk_post_cover_id'))
picture_ids = db.Column(db.Integer, db.ForeignKey('pictures.id',
use_alter=True, name='fk_post_picture_ids'))
cover = db.relationship('Picture', foreign_keys=cover_id, post_update=True)
gallery = db.relationship('Picture', foreign_keys=picture_ids,
order_by='Picture.position',
collection_class=ordering_list('position'))
class Picture(db.Model):
__tablename__ = 'pictures'
id = db.Column(db.Integer, primary_key=True)
position = db.Column(db.Integer)
post_id = db.Column(db.Integer, db.ForeignKey('posts.id'))
Я предполагаю, что это так, я настроил множественная связь между двумя моделями. Помогите мне определить, что мне не хватает!
EDIT: Согласно предложению badAPI, picture_ids
будет содержать только одно значение, а не список значений. Следующие изменения в моих моделях создавали рабочее отношение «один ко многим»:
class Post(db.Model):
__tablename__ = 'posts'
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('users.id'))
cover_id = db.Column(db.Integer, db.ForeignKey('pictures.id',
use_alter=True, name='fk_post_cover_id'))
cover = db.relationship('Picture', uselist=False, foreign_keys=cover_id,
post_update=True)
class Picture(db.Model):
__tablename__ = 'pictures'
id = db.Column(db.Integer, primary_key=True)
position = db.Column(db.Integer)
post_id = db.Column(db.Integer, db.ForeignKey('posts.id'))
gallery = db.relationship('Post', foreign_keys=post_id,
order_by='Picture.position',
collection_class=ordering_list(position),
backref=db.backref('gallery'))
По-прежнему бросает ту же ошибку. Разве это не «справочник» для установления отношений «один к одному»? Мне нужна «галерея», чтобы быть списком фотографий, связанных с сообщением. –
'uselist = False' установлен на backref, так как каждое изображение принадлежит только одному сообщению. Вы пытались удалить другие kwargs, такие как 'collection_class',' order_by' и 'foreign_keys', чтобы узнать, какая из них вызывает проблему? – badAPI
Спасибо, что нашли время, чтобы посмотреть на это. Я удалил 'picture_ids' и использовал вашу версию' gallery', так что никаких других kwargs, как вы предложили, все равно такая же ошибка. Разве вы не хотели добавить свою версию модели «галерея» в «Фото»? –