Ir al contenido principal

SelectField con Flask - SQLAlchemy - wtforms - flask_wtf

requirements.txt

flask==2.2.1
flask_sqlalchemy==2.5.1
flask-wtf==1.0.1
wtforms==3.0.1

db.sql

CREATE DATABASE blog;

CREATE TABLE countries (
id INTEGER PRIMARY KEY,
name STRING (60)

);

INSERT INTO countries (id, name) VALUES (171, 'Philippines');
INSERT INTO countries (id, name) VALUES (227, 'United States of America');

CREATE TABLE state (
id INTEGER PRIMARY KEY,
name STRING (60),
country_id INTEGER

);

INSERT INTO state (id, name, country_id) VALUES (1, 'ARMM', 171);
INSERT INTO state (id, name, country_id) VALUES (2, 'Bicol', 171);
INSERT INTO state (id, name, country_id) VALUES (3, 'Central Luzon', 171);
INSERT INTO state (id, name, country_id) VALUES (4, 'Central Mindanao', 171);
INSERT INTO state (id, name, country_id) VALUES (5, 'Alabama', 227);
INSERT INTO state (id, name, country_id) VALUES (6, 'Alaska', 227);
INSERT INTO state (id, name, country_id) VALUES (7, 'Arizona', 227);
INSERT INTO state (id, name, country_id) VALUES (8, 'California', 227);
INSERT INTO state (id, name, country_id) VALUES (9, 'Florida', 227);

CREATE TABLE city (
id INTEGER PRIMARY KEY,
state STRING (60),
name STRING (60),
stateid INTEGER

);

INSERT INTO city (id, state, name, stateid) VALUES (1, 'CA', 'Anaheim', 8);
INSERT INTO city (id, state, name, stateid) VALUES (2, 'NV', 'Arden-Arcade', 8);
INSERT INTO city (id, state, name, stateid) VALUES (3, 'CA', 'Bakersfield', 8);
INSERT INTO city (id, state, name, stateid) VALUES (4, 'CA', 'Carson', 8);
INSERT INTO city (id, state, name, stateid) VALUES (5, 'NV', 'Daly City', 8);
INSERT INTO city (id, state, name, stateid) VALUES (6, NULL, 'Angeles City', 3);
INSERT INTO city (id, state, name, stateid) VALUES (7, NULL, 'Olongapo', 3);
INSERT INTO city (id, state, name, stateid) VALUES (8, NULL, 'San Fernando', 3);
INSERT INTO city (id, state, name, stateid) VALUES (9, NULL, 'Tarlac', 3);

main.py

from flask import Flask, render_template, request, jsonify, json
from flask_sqlalchemy import SQLAlchemy  
from wtforms import SelectField
from flask_wtf import FlaskForm
 
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///blog.db'
app.config['SECRET_KEY'] = 'cairocoders-ednalan'
 
db = SQLAlchemy(app) 
 
class Country(db.Model):
    __tablename__ = 'countries'
  
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(60))
  
class State(db.Model):
    __tablename__ = 'state'
  
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(60))
    country_id = db.Column(db.Integer)
  
class City(db.Model):
 __tablename__ = 'city'
 
 id = db.Column(db.Integer, primary_key=True)
 name = db.Column(db.String(60))
 stateid = db.Column(db.Integer) 
 
class Form(FlaskForm):
    country = SelectField('country', choices=[])
    state = SelectField('state', choices=[])
    city = SelectField('city', choices=[])
         
@app.route('/', methods=['GET', 'POST'])
def index():
    form = Form()
    form.country.choices = [(country.id, country.name) for country in Country.query.all()]
  
    if request.method == 'POST':
       city = City.query.filter_by(id=form.city.data).first()
       country = Country.query.filter_by(id=form.country.data).first()
       state = State.query.filter_by(id=form.state.data).first()
       return '

Country : {}, State: {}, City: {}

'.format(country.name, state.name, city.name) return render_template('index.html', form=form) @app.route('/state/') def statebycountry(get_state): state = State.query.filter_by(country_id=get_state).all() stateArray = [] for city in state: stateObj = {} stateObj['id'] = city.id stateObj['name'] = city.name stateArray.append(stateObj) return jsonify({'statecountry' : stateArray}) @app.route('/city/') def city(get_city): state_data = City.query.filter_by(stateid=get_city).all() cityArray = [] for city in state_data: cityObj = {} cityObj['id'] = city.id cityObj['name'] = city.name cityArray.append(cityObj) return jsonify({'citylist' : cityArray}) if __name__ == '__main__': app.run(debug=True)

templates/index.html


    
    
    
    Python Flask Dynamic Select Box using Flask-WTF, javascript and SQLAlchemy
 




Python Flask Dynamic Select Box using Flask-WTF, javascript and SQLAlchemy

{{ form.csrf_token}}
{{ form.country(class="form-control") }}
{{ form.state(class="form-control")}}
{{ form.city(class="form-control")}}

Comentarios

Entradas populares de este blog

Crear Excel con C# sin librerias de Office - SpreadsheetLight

En este ejemplo se crea un archivo Excel(xlsx) con dos hojas. La libreria hay que usar es SpreadsheetLight. El codigo es de un proyecto de consola y logicamente le falta el: using SpreadsheetLight;

Cargar Archivo de texto a Sql Server con Integration Services SSIS

Script usado en el ejemplo: CREATE TABLE dbo.Personas ( idPersona INT PRIMARY KEY IDENTITY(1,1), Codigo VARCHAR(3), Nombres VARCHAR(17), Edad VARCHAR(3), Fecha VARCHAR(8), Ocupacion VARCHAR(13) ) Archivo: 001Juan Perez 02931122000Estudiante 002Juana Rosi 05301011982Profesor 003Edgar Bravo 03131121990Comerciante 004Monica Argento 04031121972Medico 005Jorge Lopez 02231121932Desocupado 006Ezequiel Bianchi 02131121987Deportista 007Pepe Argento 02731121960Actor

DataTable con C#

Crea un DataTable. Crea sus columnas, una es de tipo entero auto incremental. Carga dos registros y luego son mostrados por consola. NameSpace necesario: System.Data DataTable dt = new DataTable("Personas"); DataColumn colIdPersona = dt.Columns.Add("idPersona", typeof(Int32)); colIdPersona.AllowDBNull = false; colIdPersona.Unique = true; colIdPersona.AutoIncrement = true; colIdPersona.AutoIncrementSeed = 1; colIdPersona.AutoIncrementStep = 1; DataColumn colNombre = dt.Columns.Add("Nombre", typeof(string)); colNombre.AllowDBNull = false; dt.Columns.Add("Edad", typeof(Int16)); dt.Columns.Add("FechaNacimiento", typeof(DateTime)); dt.Rows.Add(null, "Jorge", 44, Convert.ToDateTime("31/12/1970").ToString("dd/MM/yyyy")); dt.Rows.Add(null, "Valeria", 30, Convert.ToDateTime("12/02/1986").ToString("dd/MM/yyyy")); foreach (DataRow item in dt.Rows) { Console.WriteLine(item[0])...