jquery自动完成问题正确地序列化数据

时间:2017-11-22 07:08:30

标签: python json sqlalchemy flask-sqlalchemy jquery-ui-autocomplete

我正在尝试实现jQuery自动完成,并且无法传递对象,因此他们拥有我的html中提供的所有信息。我正在尝试关注Carl Ekerot's Post,但无法正确序列化。在我的模板中,当我输入要搜索的条目时,我在下拉列表中没有任何建议。数据库正在正确地返回几个条目,因此问题必须在于它如何序列化数据。

以下是我正在尝试实施的jQuery Autocomplete Documentation的链接。

models.py

class Serializer(object):
    def serialize(self):
        return {c: getattr(self, c) for c in inspect(self).attrs.keys()}

    @staticmethod
    def serialize_list(l):
        return [m.serialize() for m in l]

class User(db.Model, Serializer):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(32), index=True, unique=True, nullable=False)
    password_hash = db.Column(db.String(128), nullable=False)
    #active=db.Column(db.Boolean, default=True)
    admin = db.Column(db.Boolean, default=False)
    last_seen = db.Column(db.DateTime)
    roles=db.relationship('Role', backref='user')
    replies_sent=db.relationship('Message_Reply', backref='from_user')
    group_admins=db.relationship('Group',
                                secondary='admined',
                                primaryjoin=(admined.c.user_id==id),
                                backref='admins')
    messages=db.relationship('Message_User', backref='user')
    groups=db.relationship('Group',
                                secondary='grouped',
                                primaryjoin=(grouped.c.user_id==id),
                                backref='users')
    permissions = db.relationship('Permission',
                                secondary=permissioned,
                                primaryjoin=(permissioned.c.user_id==id),
                                backref='users')

    def serialize(self):
        d = Serializer.serialize(self)
        del d['password_hash']
        del d['admin']
        del d['roles']
        del d['replies_sent']
        del d['group_admins']
        del d['messages']
        del d['groups']
        del d['permissions']
        del d['last_seen']
        return d

views.py

@app.route("/search", methods=['GET', 'POST'])
def search():
    print request.args
    try:
        term=request.args['term']
        data=User.query.filter(User.username.like('%'+term+'%')).all()
        '''
        q=[]
        for i in data:
            q.append(i.username)
        '''
    except:
        return jsonify('fail')
    print User.serialize_list(data)
    return json.dumps(User.serialize_list(data))
    #return json.dumps(data.serialize())
    #return jsonify('a')

'''
def get_user(id):
    user = User.query.get(id)
    return json.dumps(user.serialize())

def get_users():
    users = User.query.all()
    return json.dumps(User.serialize_list(users))
  '''

scripts.js中

$( function() {
    function log( message ) {
        $( "<div>" ).text( message ).prependTo( "#log" );
        $( "#log" ).scrollTop( 0 );
    }

    $("#birds").autocomplete({
        source: "/search",
        minLength: 1,
        select: function( event, ui ) {
            log("Selected: " + ui.item.value + " aka " + ui.item.id);
        }
    });
});

template.html

<div class="ui-widget">
  <input id="birds" class="form-control"  placeholder="Users">
</div>

<div class="ui-widget" style="margin-top:2em; font-family:Arial">
  Result:
  <div id="log" style="height: 200px; width: 300px; overflow: auto;" class="ui-widget-content"></div>
</div>

0 个答案:

没有答案