Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python SQLAlchemy:如何从其他模型继承数据并将其设置为默认值?_Python_Flask_Sqlalchemy - Fatal编程技术网

Python SQLAlchemy:如何从其他模型继承数据并将其设置为默认值?

Python SQLAlchemy:如何从其他模型继承数据并将其设置为默认值?,python,flask,sqlalchemy,Python,Flask,Sqlalchemy,我还不习惯SQLAlchemy,所以这可能是个愚蠢的问题。 我第一次尝试使用Flask和SQLAlchemy制作web应用程序。 我要做的是从其他模型继承数据并将其设置为默认值 我所做的是这样的 class User(UserMixin, db.Model): username = db.Column(db.String(64), index=True, unique=True) upload_photo = db.relationship('Photo', backref='u

我还不习惯
SQLAlchemy
,所以这可能是个愚蠢的问题。 我第一次尝试使用
Flask
SQLAlchemy
制作web应用程序。 我要做的是从其他模型继承数据并将其设置为默认值

我所做的是这样的

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'))
    {% for photo in photos %}
            {{ photo.user.username }}
    {% endfor %}
所以我想把上传照片的用户名设置为上传者的名字。 但是当我提到uploder\u名称时,它总是
'None'
。 也许我误解了关系和外国人。 我怎样才能解决这个问题?另外,请告诉我我的方式有多错误,以及如何正确使用关系

谢谢你的回复。但是输出仍然是一样的,即使我像答案一样改变了 其实我想在网页上展示,但我不能参考,即使其他东西可以参考

    photos = Photo.query.with_entities(Photo.name, Photo.image, Photo.user).all()
    return render_template('index.html', title='Home', photos=photos)
HTML是这样的

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'))
    {% 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')

我检查了它在解释器上的工作方式,但它是相同的。

您应该使用关系(在本例中,):

然后您可以在两侧访问这些对象:

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()

db.ForeignKey('user.username')
可能应该是
db.ForeignKey('user.id')
,因为
user\u id
具有整数类型。修复了代码。。。对不起,我犯了错误。。。这肯定行得通。您是否收到任何错误?我没有收到任何错误,但输出仍然为“无”。我将很快编辑我的问题。原始上传者的名字行必须像你的一样改变吗?原来的是Sting和user.username。是的。。。因为您可以使用
photo.user.username