烧瓶,用外键加入两个型号

时间:2016-01-27 01:07:07

标签: python flask flask-sqlalchemy

我的两个模特是

class Users (db.Model):
    UserId = db.Column(db.INTEGER, primary_key=True,autoincrement=True)
    UserName = db.Column(db.String(25),nullable=False, unique=True)
    Email = db.Column(db.String,nullable=False,unique=True)
    plan = db.relationship(
        'Messages',
        collection_class=attribute_mapped_collection('language'),
        cascade="all,delete"
    )

class Messages (db.Model):
    MessageId = db.Column(db.INTEGER,primary_key=True,autoincrement=True)
    SenderId = db.Column(db.INTEGER,db.ForeignKey('Users.UserId'),nullable=False)
    language = db.Column(db.Enum('de', 'en'), nullable=False)

现在,我的观点如下:

def premium():
    usr_obj = models.Users.query.join(models.Messages)\
        .order_by(models.Users.UserId.desc())

    return render_template('user_plan.html', user=usr_obj)

我的user_html就像:

{% for a in user %}
            {{ a.UserName }} </br> {{ a.SenderID }} </br>
        {% endfor %}

它只给我{{a.UserName}}而不是{{a.SenderID}}的价值,为什么?

2 个答案:

答案 0 :(得分:1)

如果您只想要来自此联接的senderId和UserName,您可以尝试:

     obj= Users.query.with_entities(Users.UserName,Messages.SenderId
             ).join(Messages,Messages.SenderId==Users.UserId
             ).order_by(Users.UserId.desc()
             ).all()

解释: -    我们正在应用Messages.SenderId和Users.UserId

with_entities:表示我们只需要来自此联接的UserName,SenderId。

您可以使用for循环从此连接访问UserName和SenderId。 像这样:

    for o in obj:
      print o.UserName,o.SenderId

我希望这是您问题的解决方案。请根据您的问题使用它。

答案 1 :(得分:0)

可以使用:

{% for a in user %}
        {{ a.UserName }} </br> {{ a.plan[g.current_lang].SenderID }} </br>
    {% endfor %}