Commit a837d804 authored by PJ Janse van Rensburg's avatar PJ Janse van Rensburg

Update sqla example

parent 0da38c88
...@@ -28,11 +28,10 @@ class User(db.Model): ...@@ -28,11 +28,10 @@ class User(db.Model):
id = db.Column(db.Integer, primary_key=True) id = db.Column(db.Integer, primary_key=True)
first_name = db.Column(db.String(100)) first_name = db.Column(db.String(100))
last_name = db.Column(db.String(100)) last_name = db.Column(db.String(100))
username = db.Column(db.String(80), unique=True)
email = db.Column(db.String(120), unique=True) email = db.Column(db.String(120), unique=True)
def __str__(self): def __str__(self):
return self.username return "{} {}".format(self.first_name, self.last_name)
# Create M2M table # Create M2M table
...@@ -54,7 +53,7 @@ class Post(db.Model): ...@@ -54,7 +53,7 @@ class Post(db.Model):
tags = db.relationship('Tag', secondary=post_tags_table) tags = db.relationship('Tag', secondary=post_tags_table)
def __str__(self): def __str__(self):
return self.title return "{}".format(self.title)
class Tag(db.Model): class Tag(db.Model):
...@@ -62,7 +61,7 @@ class Tag(db.Model): ...@@ -62,7 +61,7 @@ class Tag(db.Model):
name = db.Column(db.Unicode(64)) name = db.Column(db.Unicode(64))
def __str__(self): def __str__(self):
return self.name return "{}".format(self.name)
class UserInfo(db.Model): class UserInfo(db.Model):
...@@ -75,7 +74,7 @@ class UserInfo(db.Model): ...@@ -75,7 +74,7 @@ class UserInfo(db.Model):
user = db.relationship(User, backref='info') user = db.relationship(User, backref='info')
def __str__(self): def __str__(self):
return '%s - %s' % (self.key, self.value) return "{} - {}".format(self.key, self.value)
class Tree(db.Model): class Tree(db.Model):
...@@ -85,7 +84,7 @@ class Tree(db.Model): ...@@ -85,7 +84,7 @@ class Tree(db.Model):
parent = db.relationship('Tree', remote_side=[id], backref='children') parent = db.relationship('Tree', remote_side=[id], backref='children')
def __str__(self): def __str__(self):
return self.name return "{}".format(self.name)
# Flask views # Flask views
...@@ -96,28 +95,38 @@ def index(): ...@@ -96,28 +95,38 @@ def index():
# Customized User model admin # Customized User model admin
class UserAdmin(sqla.ModelView): class UserAdmin(sqla.ModelView):
column_list = [
'id',
'last_name',
'first_name',
'email',
]
column_default_sort = [('last_name', False), ('first_name', False)] # sort on multiple columns
inline_models = (UserInfo,) inline_models = (UserInfo,)
# Customized Post model admin # Customized Post model admin
class PostAdmin(sqla.ModelView): class PostAdmin(sqla.ModelView):
# Visible columns in the list view
column_exclude_list = ['text'] column_exclude_list = ['text']
column_sortable_list = [
# List of columns that can be sorted. For 'user' column, use User.username as 'title',
# a column. 'date',
column_sortable_list = ('title', ('user', 'user.username'), 'date') ('user', ('user.last_name', 'user.first_name')), # sort on multiple columns
]
# Rename 'title' columns to 'Post Title' in list view column_labels = dict(title='Post Title') # Rename 'title' column in list view
column_labels = dict(title='Post Title') column_searchable_list = [
'title',
column_searchable_list = ('title', User.username, 'tags.name') User.first_name,
User.last_name,
column_filters = ('user', 'tags.name',
'title', ]
'date', column_filters = [
'tags', 'user',
filters.FilterLike(Post.title, 'Fixed Title', options=(('test1', 'Test 1'), ('test2', 'Test 2')))) 'title',
'date',
'tags',
filters.FilterLike(Post.title, 'Fixed Title', options=(('test1', 'Test 1'), ('test2', 'Test 2'))),
]
# Pass arguments to WTForms. In this case, change label for text field to # Pass arguments to WTForms. In this case, change label for text field to
# be 'Big Text' and add required() validator. # be 'Big Text' and add required() validator.
...@@ -127,11 +136,11 @@ class PostAdmin(sqla.ModelView): ...@@ -127,11 +136,11 @@ class PostAdmin(sqla.ModelView):
form_ajax_refs = { form_ajax_refs = {
'user': { 'user': {
'fields': (User.username, User.email) 'fields': (User.first_name, User.last_name)
}, },
'tags': { 'tags': {
'fields': (Tag.name,), 'fields': (Tag.name,),
'minimum_input_length': 0, 'minimum_input_length': 0, # show suggestions, even before any user input
'placeholder': 'Please select', 'placeholder': 'Please select',
'page_size': 5, 'page_size': 5,
}, },
...@@ -174,8 +183,8 @@ def build_sample_db(): ...@@ -174,8 +183,8 @@ def build_sample_db():
'Riley', 'William', 'James', 'Geoffrey', 'Lisa', 'Benjamin', 'Stacey', 'Lucy' 'Riley', 'William', 'James', 'Geoffrey', 'Lisa', 'Benjamin', 'Stacey', 'Lucy'
] ]
last_names = [ last_names = [
'Brown', 'Smith', 'Patel', 'Jones', 'Williams', 'Johnson', 'Taylor', 'Thomas', 'Brown', 'Brown', 'Patel', 'Jones', 'Williams', 'Johnson', 'Taylor', 'Thomas',
'Roberts', 'Khan', 'Lewis', 'Jackson', 'Clarke', 'James', 'Phillips', 'Wilson', 'Roberts', 'Khan', 'Clarke', 'Clarke', 'Clarke', 'James', 'Phillips', 'Wilson',
'Ali', 'Mason', 'Mitchell', 'Rose', 'Davis', 'Davies', 'Rodriguez', 'Cox', 'Alexander' 'Ali', 'Mason', 'Mitchell', 'Rose', 'Davis', 'Davies', 'Rodriguez', 'Cox', 'Alexander'
] ]
...@@ -183,9 +192,8 @@ def build_sample_db(): ...@@ -183,9 +192,8 @@ def build_sample_db():
for i in range(len(first_names)): for i in range(len(first_names)):
user = User() user = User()
user.first_name = first_names[i] user.first_name = first_names[i]
user.username = first_names[i].lower()
user.last_name = last_names[i] user.last_name = last_names[i]
user.email = user.username + "@example.com" user.email = user.first_names[i].lower() + "@example.com"
user_list.append(user) user_list.append(user)
db.session.add(user) db.session.add(user)
......
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