2013-07-24 94 views
0

我遇到了一个看似简单的使用Flask的sqlalchemy查询的问题。Flask-SQLAlchemy查询

我有一张名为Links的表格,并且在该表格中有一列称为'id','author_id','link'和'group'的列。我的models.py如下所示:

class Links(db.Model): 

__tablename__='links' 

id = db.Column(db.Integer, primary_key=True) 
author_id = db.Column(db.Integer, db.ForeignKey('users.id')) 
link = db.Column(db.String, unique=False, nullable=True) 
group = db.Column(db.String, unique=False, nullable=False) 


def __init__(self, author_id=None, link=None, group=None): 
    self.author_id = author_id 
    self.link = link 
    self.group = group 

def __repr__(self): 
    return'<Link %r>' %(self.link) 

我想返回与登录到应用程序的用户关联的所有组的值。这里是我的views.py文件:

@app.route('/members/', methods=['GET','POST']) 
@login_required 
def members(): 
    error=None 
    form = PostLink(request.form, csrf_enabled = False) 
    uid = session['user_id'] 
    link = "NULL" 
    groups = Links.query.filter_by(author_id=uid).all() 

    if request.method=='POST': 
     if form.validate_on_submit(): 
      new_group = Links(
         uid, 
         form.group.data, 
         link, 
         ) 
      try: 
        db.session.add(new_group) 
        db.session.commit() 
        flash("You have created a group!") 
      except IntegrityError: 
        error = 'That group did not work, maybe it already exists?' 
      else: 
      flash_errors(form) 
    return render_template('members.html', form=form, error=error, link = link, groups=groups) 

而我的 'members.html':

{% extends "base.html" %} 

{%块含量%}

<p>Add New Group: {{ form.group }}</p> 
    <input id="link" type="hidden" name="link" value= {{ link }}/> 
    <p><input type="submit" value="Request"></p> 
</form> 
<br/> 
{% for group in groups %} 
<li><p> 
{{ group }} 
</p></li> 
{% endfor %} 

{% endblock %} 

目前这只是一个返回链接和组以奇数格式列表:

<Link u'link2'> 

<Link u'linky'> 

<Link u'linkymaybe'> 

<Link u'madeit'> 

<Link u'BLAH'> 

所以我的问题的核心是如何使用SQLAlchemy建立查询来显示与登录用户相关联的所有组(uid = session ['user_id'])我对Flask来说很新颖,这个问题正在成为一个问题,因为我尝试了一些filter_by和filter语句,但都没有运气。

预先感谢您!

回答

1

正确显示查询返回的对象“链接”。 您需要在模板中对其进行格式化。

Thisi is link {{ group.link }} from author #{{ group.author_id }} in group named {{ group.group }} 

也许你在循环模板结果时选择了一个坏名字“group”。它应该被称为链接。

+0

谢谢!这很好。还有一个问题。我如何过滤输出以显示没有重复的组? – jmbmxer

0

在该模板中,您可以使用{{ link.group }}而不是{{ link }}显示组名称。查询返回整个对象。