Python Django: Introduction to models and ORM
In the previous article we see django views, django template. In this artical we see the third component of MVT pattern, django models.
Here Object-Relational Mapping, ORM is an important concept. This allow for combination of of the OOP world of python and the relational database world of SQL. With ORM, Python classes, methods, and objects become the tools for interacting with SQL database.
In our demoApp, the next app is to add the database, django was designed for interacting with data, so it makes it easy to do so .
demoApp/models.py look like this
from django.db import models
# Create your models here
now suppose we want to store the details of every user that comes to our website, so we need to create a model for user in demoApp/models.py. A model for user look like this
class Myuser(models.model):
first_name = models.CharField(max_length = 64)
last_name = models.CharField(max_length = 64)
first_name = models.CharField(max_length = 64)
last_name = models.CharField(max_length = 64)
age = models.IntegerField()
Inheriting models.model just establishes this class as django model.
Django has a number of built-in types of fields that map to different type of data in a SQL database, for instance. Eg:- IntergerField(), CharField()
Migrations:
Usually, tables are built up as the application grows, and the database will
be modified.
It
would be tedious to change both the Django model code and run the SQL commands to modify the database.
Solution to this problem is Django migrations. Django automatically detects and changes to
models.py
and automatically generates the necessary SQL code to make the necessary changes.
For migration, run
python3 manage.py makemigrations
This will look through model files for any changes and generate a migration, which represents the necessary changes for the database. Running this command will create a file
migrations/0001_initial.py
that contains everything
that
should happen to the database.
On runnning
python3 manage.py migrate,
the generated SQL command is executed and
create user table in database
that contains first_name, last_name and age as the column, and one additional column id which is automatically created by django.
The default database of django is SQLite, but you can always change this via settings.py.
Now back to views.py and import the Myuser and write the following code in views.py
In the temp views, we create several objects of Myuser and save. Obj.save is analogous to SQL
COMMIT
.
We can query of user using Myuser.objects.all() command and pass the it in context.
Django provide lots of default command for managing models like filtering object. In alluser template...
We can iterate over all user using template language looping, now run the server and go to page, its look like this. Right one is old page, we created in previous article and now we have a default page for all user.
Note that in here we are creating Myuser object in temp view, everytime url goes to temp views three new objects is created with name vikram, ankit and shanker.
This is the basic introduction, In the next article we use better approach to handle this.