Skip to content

Commit 1ed9c30

Browse files
committed
Add numbers field to example app demo base
1 parent 0cbca28 commit 1ed9c30

File tree

5 files changed

+89
-0
lines changed

5 files changed

+89
-0
lines changed

example_app/app.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
from example_app import views
66
from example_app.models import db
7+
from example_app.numbers_demo import numbers_demo_view
78
from example_app.strings_demo import strings_demo_view
89
from flask_mongoengine.panels import mongo_command_logger
910

@@ -45,6 +46,10 @@
4546
app.add_url_rule(
4647
"/strings_demo/<pk>/", view_func=strings_demo_view, methods=["GET", "POST"]
4748
)
49+
app.add_url_rule("/numbers_demo", view_func=numbers_demo_view, methods=["GET", "POST"])
50+
app.add_url_rule(
51+
"/numbers_demo/<pk>/", view_func=numbers_demo_view, methods=["GET", "POST"]
52+
)
4853

4954
if __name__ == "__main__":
5055
app.run(host="0.0.0.0", port=8000)

example_app/numbers_demo.py

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
"""Numbers and related fields demo model."""
2+
3+
from flask import render_template, request
4+
5+
from example_app.models import db
6+
7+
8+
class NumbersDemoModel(db.Document):
9+
"""Documentation example model."""
10+
11+
simple_sting_name = db.StringField()
12+
decimal_field_unlimited = db.DecimalField()
13+
integer_field_unlimited = db.IntField()
14+
decimal_field_limited = db.DecimalField()
15+
integer_field_limited = db.IntField()
16+
17+
18+
NumbersDemoForm = NumbersDemoModel.to_wtf_form()
19+
20+
21+
def numbers_demo_view(pk=None):
22+
"""Return all fields demonstration."""
23+
form = NumbersDemoForm()
24+
obj = None
25+
if pk:
26+
obj = NumbersDemoModel.objects.get(pk=pk)
27+
form = NumbersDemoForm(obj=obj)
28+
29+
if request.method == "POST" and form.validate_on_submit():
30+
if pk:
31+
form.populate_obj(obj)
32+
obj.save()
33+
else:
34+
form.save()
35+
page_num = int(request.args.get("page") or 1)
36+
page = NumbersDemoModel.objects.paginate(page=page_num, per_page=100)
37+
38+
return render_template(
39+
"numbers_demo.html", page=page, form=form, model=NumbersDemoModel
40+
)

example_app/templates/layout.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
<li><a href="{{ url_for("index") }}">Home</a></li>
2020
<li><a href="{{ url_for("pagination") }}">Pagination</a></li>
2121
<li><a href="{{ url_for("strings_demo_view") }}">Strings demo</a></li>
22+
<li><a href="{{ url_for("numbers_demo_view") }}">Numbers demo</a></li>
2223
</ul>
2324
</nav>
2425
<div>
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
{% extends "layout.html" %}
2+
{% from "_formhelpers.html" import render_field %}
3+
{% from "_formhelpers.html" import render_navigation %}
4+
5+
{% block body %}
6+
7+
<div>
8+
<table>
9+
<thead>
10+
<tr>
11+
{% for field in model._fields_ordered %}
12+
<th>{{ model[field].name }}</th>
13+
{% endfor %}
14+
<th>Edit</th>
15+
</tr>
16+
</thead>
17+
<tbody>
18+
{% for page_object in page.items %}
19+
<tr>
20+
{% for field in page_object._fields_ordered %}
21+
<td>{{ page_object[field] }}</td>
22+
{% endfor %}
23+
<td><a href="{{ url_for('numbers_demo_view', pk=page_object.pk) }}">edit</a></td>
24+
</tr>
25+
{% endfor %}
26+
</tbody>
27+
</table>
28+
</div>
29+
<div>
30+
{{ render_navigation(page, "numbers_demo_view") }}
31+
</div>
32+
<div>
33+
<form method="POST">
34+
{% for field in form %}
35+
{{ render_field(field, style='font-weight: bold') }}
36+
{% endfor %}
37+
<input type="submit" value="{% if form.instance %}Edit{% else %}Create{% endif %}">
38+
</form>
39+
</div>
40+
41+
{% endblock %}

example_app/views.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from mongoengine.context_managers import switch_db
55

66
from example_app import models
7+
from example_app.numbers_demo import NumbersDemoModel
78
from example_app.strings_demo import StringsDemoModel
89

910

@@ -49,6 +50,7 @@ def delete_data():
4950
with switch_db(models.Todo, "default"):
5051
models.Todo.objects().delete()
5152
StringsDemoModel.objects().delete()
53+
NumbersDemoModel.objects().delete()
5254
with switch_db(models.Todo, "secondary"):
5355
models.Todo.objects().delete()
5456

0 commit comments

Comments
 (0)