我还不习惯SQLAlchemy
,所以这可能是一个愚蠢的问题。
我正在尝试使用Flask
和SQLAlchemy
首次制作网络应用。
我想要做的是从其他模型继承数据并将其设置为默认值。
我在做什么就是这样
class User(UserMixin, db.Model):
username = db.Column(db.String(64), index=True, unique=True)
upload_photo = db.relationship('Photo', backref='user')
class Photo(db.Model):
uploader_name = db.Column(db.String(64), db.ForeignKey('user.username'))
所以我想将上传照片的用户名设置为uploader_name。
但是当我提到uploder_name时,它总是'None'
。
也许我误解了关系和ForeignKeys。
我怎样才能解决这个问题?还请告诉我我的方式有多错,以及如何正确使用关系。
感谢您的回复。但是输出仍然是相同的,即使我改变了答案。我在做什么就是这样 实际上我想在网页上显示它,但即使可以提及其他内容,我也无法推荐。
photos = Photo.query.with_entities(Photo.name, Photo.image, Photo.user).all()
return render_template('index.html', title='Home', photos=photos)
和HTML就像这样
{% for photo in photos %}
{{ photo.user.username }}
{% endfor %}
为此,它没有显示任何内容,当我将其更改为{{ photo.user }}
时,它显示None
我以示例的方式显示模型部分
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), index=True, unique=True)
photos = db.relationship('Photo', back_populates='user')
class Photo(db.Model):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
user = db.relationship('User', back_populates='photos')
我检查了它在解释器上是如何工作的,但它是一样的。
答案 0 :(得分:1)
您应该使用关系(在这种情况下,One-To-Many):
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key = True)
username = db.Column(db.String(64), index=True, unique=True)
photos = db.relationship('Photo', back_populates = 'user')
class Photo(db.Model):
id = db.Column(db.Integer, primary_key = True)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'))
user = db.relationship('User', back_populates = 'photos')
然后你可以在两边访问这些对象:
user = User.query.filter_by(id = 1).first()
user.photos # Outputs all photos with user_id set to this user
photo = Photo.query.filter_by(id = 1).first()
photo.user # Outputs the user of a certain photo
您可以通过不同方式将照片添加到使用中,最直接的方法是:
user = User.query.filter_by(id = 1).first()
new_photo = Photo()
user.photos.append(new_photo)
db.session.commit()