Commit 3e2be5a2 authored by Serge S. Koval's avatar Serge S. Koval

MongoEngine filters working

parent 3d5cbae0
...@@ -4,7 +4,7 @@ from flask import Flask ...@@ -4,7 +4,7 @@ from flask import Flask
from flask.ext import admin from flask.ext import admin
from flask.ext.mongoengine import MongoEngine from flask.ext.mongoengine import MongoEngine
from flask.ext.admin.contrib import mongoengine from flask.ext.admin.contrib.mongoengine import ModelView
# Create application # Create application
app = Flask(__name__) app = Flask(__name__)
...@@ -18,17 +18,33 @@ db = MongoEngine() ...@@ -18,17 +18,33 @@ db = MongoEngine()
db.init_app(app) db.init_app(app)
class User(db.Document):
name = db.StringField(max_length=40)
tag = db.StringField(max_length=20)
password = db.StringField(max_length=40)
def __unicode__(self):
return self.name
class Todo(db.Document): class Todo(db.Document):
title = db.StringField(max_length=60) title = db.StringField(max_length=60)
text = db.StringField() text = db.StringField()
done = db.BooleanField(default=False) done = db.BooleanField(default=False)
pub_date = db.DateTimeField(default=datetime.datetime.now) pub_date = db.DateTimeField(default=datetime.datetime.now)
user = db.ReferenceField(User)
# Required for administrative interface # Required for administrative interface
def __unicode__(self): def __unicode__(self):
return self.title return self.title
# Customized admin views
class UserView(ModelView):
column_filters = ('name',
User.tag)
# Flask views # Flask views
@app.route('/') @app.route('/')
def index(): def index():
...@@ -40,7 +56,8 @@ if __name__ == '__main__': ...@@ -40,7 +56,8 @@ if __name__ == '__main__':
admin = admin.Admin(app, 'Simple Models') admin = admin.Admin(app, 'Simple Models')
# Add views # Add views
admin.add_view(mongoengine.ModelView(Todo)) admin.add_view(UserView(User))
admin.add_view(ModelView(Todo))
# Start app # Start app
app.debug = True app.debug = True
......
...@@ -180,7 +180,11 @@ class ModelView(BaseModelView): ...@@ -180,7 +180,11 @@ class ModelView(BaseModelView):
query = self.model.objects query = self.model.objects
# TODO: Filters # Filters
if self._filters:
for flt, value in filters:
f = self._filters[flt]
query = f.apply(query, value)
# Get count # Get count
count = query.count() count = query.count()
......
...@@ -271,7 +271,7 @@ class ModelView(BaseModelView): ...@@ -271,7 +271,7 @@ class ModelView(BaseModelView):
f = self._filters[flt] f = self._filters[flt]
query = self._handle_join(query, f.column, joins) query = self._handle_join(query, f.column, joins)
query = self._filters[flt].apply(query, value) query = f.apply(query, value)
# Get count # Get count
count = query.count() count = query.count()
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment