diff --git a/flask/orm-tutorial/models-tutorial/app.db b/flask/orm-tutorial/models-tutorial/app.db index 41839c5..b73bf06 100644 Binary files a/flask/orm-tutorial/models-tutorial/app.db and b/flask/orm-tutorial/models-tutorial/app.db differ diff --git a/flask/orm-tutorial/models-tutorial/app/forms.py b/flask/orm-tutorial/models-tutorial/app/forms.py index 5724699..aad5d99 100644 --- a/flask/orm-tutorial/models-tutorial/app/forms.py +++ b/flask/orm-tutorial/models-tutorial/app/forms.py @@ -2,8 +2,22 @@ from wtforms import StringField, IntegerField from flask_wtf.html5 import EmailField from wtforms.validators import DataRequired +from wtforms.ext.sqlalchemy.fields import QuerySelectField class CustomerForm(Form): + fname = StringField('fname', validators=[DataRequired()]) + lname = StringField('lname', validators=[DataRequired()]) company = StringField('company', validators=[DataRequired()]) email = EmailField('email', validators=[DataRequired()]) - # Add additional Address fields here + phone = StringField('phone', validators=[DataRequired()]) + + street_address = StringField('street_address', validators=[DataRequired()]) + city = StringField('city', validators=[DataRequired()]) + state = StringField('state', validators=[DataRequired()]) + country = StringField('country', validators=[DataRequired()]) + zip_code = StringField('zip_code', validators=[DataRequired()]) + +class OrderForm(Form): + totalspent = StringField('totalspent', validators=[DataRequired()]) + num_parts_ordered = StringField('num_parts_ordered', validators=[DataRequired()]) + customer_id = StringField('customer_id', validators=[DataRequired()]) diff --git a/flask/orm-tutorial/models-tutorial/app/models.py b/flask/orm-tutorial/models-tutorial/app/models.py index 2f53581..617d1dc 100644 --- a/flask/orm-tutorial/models-tutorial/app/models.py +++ b/flask/orm-tutorial/models-tutorial/app/models.py @@ -1,15 +1,40 @@ from app import db +orders = db.Table('orders', + db.Column('order_id', db.Integer, db.ForeignKey('order.id')), + db.Column('customer_id', db.Integer, db.ForeignKey('customer.id')) +) class Customer(db.Model): id = db.Column(db.Integer, primary_key=True) + fname = db.Column(db.String(60), unique=False) + lname = db.Column(db.String(60), unique=False) company = db.Column(db.String(120), unique=False) - email = db.Column(db.String(120)) - # You need to a relationship to Address table here - # see http://flask-sqlalchemy.pocoo.org/2.1/models/#one-to-many-relationships + email = db.Column(db.String(120), unique=False) + phone = db.Column(db.String(20), unique=False) + addresses = db.relationship('Address', backref='customer', cascade='all, delete-orphan', lazy='dynamic') + orders = db.relationship('Order', secondary=orders, backref=db.backref('customer', lazy='dynamic')) def __repr__(self): - return '' % self.email + return '' % self.id # Your Address code should go here -# class Address(db.Model): +class Address(db.Model): + id = db.Column(db.Integer, primary_key=True) + street_address = db.Column(db.String(120), unique=False) + city = db.Column(db.String(20), unique=False) + state = db.Column(db.String(5), unique=False) + country = db.Column(db.String(60), unique=False) + zip_code = db.Column(db.String(20), unique=False) + customer_id = db.Column(db.Integer, db.ForeignKey('customer.id')) + + def __repr__(self): + return '
' % self.id + +class Order(db.Model): + id = db.Column(db.Integer, primary_key=True) + num_parts_ordered = db.Column(db.String(60), unique=False) + totalspent = db.Column(db.String(60), unique=False) + + def __repr__(self): + return '
' % self.id diff --git a/flask/orm-tutorial/models-tutorial/app/templates/customer.html b/flask/orm-tutorial/models-tutorial/app/templates/customer.html index d7b457a..7c2f119 100644 --- a/flask/orm-tutorial/models-tutorial/app/templates/customer.html +++ b/flask/orm-tutorial/models-tutorial/app/templates/customer.html @@ -10,6 +10,14 @@

Add Customer to Our Database

{{ form.hidden_tag() }}
+

+ First name:
+ {{ form.fname(size=60) }}
+

+

+ Last name:
+ {{ form.lname(size=60) }}
+

Company name:
{{ form.company(size=120) }}
@@ -18,10 +26,33 @@

Add Customer to Our Database

Customer email:
{{ form.email(size=120) }}

+

+ Customer phone:
+ {{ form.phone(size=20) }}
+

- +

+ Street Address:
+ {{ form.street_address(size=120) }}
+

+

+ City:
+ {{ form.city(size=20) }}
+

+

+ State:
+ {{ form.state(size=5) }}
+

+

+ Country:
+ {{ form.country(size=60) }}
+

+

+ Zip Code:
+ {{ form.zip_code(size=20) }}
+

diff --git a/flask/orm-tutorial/models-tutorial/app/templates/home.html b/flask/orm-tutorial/models-tutorial/app/templates/home.html index 6b447ec..31c3b4c 100644 --- a/flask/orm-tutorial/models-tutorial/app/templates/home.html +++ b/flask/orm-tutorial/models-tutorial/app/templates/home.html @@ -5,6 +5,7 @@

Welcome to ACME Aircraft Parts

@@ -12,16 +13,47 @@

These are all of our awesome customers:

+ + + + + {% for customer in customers %} - + {% for address in customer.addresses.all() %} + + + + + + {% endfor %} + + {% endfor %} +
First NameLast Name Company EmailPhoneCityZip Code
{{ customer.fname }}{{ customer.lname }} {{ customer.company }} {{ customer.email }}{{ customer.phone }}{{ address.city }}{{ address.zip_code }}
+
+
+

Orders from Customers:

+ + + + + + + + + {% for order in orders %} + + + + {% for order in order.customer.all() %} + + {% endfor %} {% endfor %}
Number of PartsTotal SpentCustomer ID
{{ order.num_parts_ordered }}{{ order.totalspent }}{{ order.id }}
diff --git a/flask/orm-tutorial/models-tutorial/app/templates/order.html b/flask/orm-tutorial/models-tutorial/app/templates/order.html new file mode 100644 index 0000000..f78ecb9 --- /dev/null +++ b/flask/orm-tutorial/models-tutorial/app/templates/order.html @@ -0,0 +1,31 @@ +{% extends "base.html" %} +{% block content %} +
+
+
+ Home +
+

Add Order to Our Database

+
+ {{ form.hidden_tag() }} +
+
+

+ Number of Parts:
+ {{ form.num_parts_ordered(size=60) }}
+

+

+ Money Spent:
+ {{ form.totalspent(size=60) }}
+

+

+ Customer IDs (seperate by ","):
+ {{ form.customer_id(size=60) }}
+

+
+
+

+
+
+
+{% endblock %} diff --git a/flask/orm-tutorial/models-tutorial/app/views.py b/flask/orm-tutorial/models-tutorial/app/views.py index e49db4f..d673006 100644 --- a/flask/orm-tutorial/models-tutorial/app/views.py +++ b/flask/orm-tutorial/models-tutorial/app/views.py @@ -1,6 +1,6 @@ from flask import render_template, redirect, request from app import app, models, db -from .forms import CustomerForm +from .forms import CustomerForm, OrderForm @app.route('/') @@ -9,19 +9,48 @@ def index(): @app.route('/create_customer', methods=['GET', 'POST']) def create_customer(): - form = CustomerForm() - if form.validate_on_submit(): + customerForm = CustomerForm() + if customerForm.validate_on_submit(): customer = models.Customer( - company = form.company.data, - email = form.email.data) - # you will need to add Address here + fname = customerForm.fname.data, + lname = customerForm.lname.data, + company = customerForm.company.data, + email = customerForm.email.data, + phone = customerForm.phone.data) + address = models.Address( + street_address = customerForm.street_address.data, + city = customerForm.city.data, + state = customerForm.state.data, + country = customerForm.country.data, + zip_code = customerForm.zip_code.data, + customer = customer) db.session.add(customer) + db.session.add(address) db.session.commit() return redirect('/customers') - return render_template('customer.html', form=form) + return render_template('customer.html', form=customerForm) @app.route('/customers') def display_customer(): customers = models.Customer.query.all() - return render_template('home.html', - customers=customers) + orders = models.Order.query.all() + #orderCustomer = models.orders.query.all() + return render_template('home.html', customers=customers, orders=orders) + +@app.route('/create_order', methods=['GET', 'POST']) +def create_order(): + orderForm = OrderForm() + if orderForm.validate_on_submit(): + order = models.Order( + num_parts_ordered = orderForm.num_parts_ordered.data, + totalspent = orderForm.totalspent.data) + + customerids = orderForm.customer_id.data.split(',') + + for customer_id in customerids: + customer = models.Customer.query.filter_by(id=customer_id).first() + customer.orders.append(order) + db.session.add(order) + db.session.commit() + return redirect('/customers') + return render_template('order.html', form=orderForm)