SlideShare a Scribd company logo
Session 2 django material for training at baabtra models
Models in Django
Courtesy: djangoBook.com
Haris NP
haris@baabtra.com
www.facebook.com/haris.np
9
twitter.com/np_haris
in.linkedin.com/in/harisnp
MVC v/s MTV
• Model – Data access layer.
• View – Presentation Layer. What the user sees.
• Controller – Business Logic Layer. This layer
decides which view to use based on the user
input and which model to access.
MTV
• M stands for Model
• T stands for Template. This is presentation
layer.
• V stands for View. It is different from the MVC
architecture. It contains the business logic
layer. It access the model and calls the
Template as per the clicks.
Connecting to the database
• Settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # Add
'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
'NAME': 'baabtra', # Or path to database file if using sqlite3. This is
the name of the database.
# The following settings are not used with sqlite3:
'USER': 'root',
'PASSWORD': 'itsbaabtra',
'HOST': 'localhost',
# Empty for localhost through
domain sockets or '127.0.0.1' for localhost through TCP.
'PORT': '3306',
# Set to empty string for default.
}
}
Screenshot of Database properties
from settings.py page (mysql)
Check the connectivity
• Go to the command prompt
• Traverse to the project folder Type :
python manage.py shell
• Type
– from django.db import connection
– cursor = connection.cursor()
If there is no error, then you have configured it
correctly.
Project v/s App in Django
• Project: Set of multiple apps with its
configuration.
• App: Set of Django functionality. Apps are
portable and reusable across multiple
projects.
• For starting an app, please use the following
command
python manage.py startapp nameoftheapp
• python manage.py startapp baabtramodel
INSTALLED_APP
• Models
– It is the description of the data in your database.
– It is written in python code.
– It is equivalent to CREATE TABLE. If the table doesn’t
exist, when the project is synched with the database that
you are creating, the tables are created. If you want to
migrate your application from MySQL to Postgres, you
don’t have to rewrite the SQL codes again.
– Since the SQL Codes are written in the python, version
control of database is easy. If there are modifications to
the existing database, it might create out of sync problems.
• Sample Model
class Category(models.Model):
category_code=models.CharField(max_length=10)
category_description=models.CharField(max_length=300)
def __unicode__(self):
return self.category_code
class Item(models.Model):
item_name=models.CharField(max_length=200)
item_code=models.CharField(max_length=10)
item_barcode=models.CharField(max_length=20)
item_description=models.CharField(max_length=300)
item_cost=models.FloatField(max_length=10)
item_retail_price=models.FloatField(max_length=10)
item_category_id=models.ForeignKey(Category)
def __unicode__(self):
return self.item_name
class Supplier(models.Model):
supplier_name=models.CharField(max_length=50)
supplier_code=models.CharField(max_length=10)
credit_period=models.CharField(max_length=50)
credit_limit=models.FloatField(max_length=10)
class Purchase_order(models.Model):
supplier_code=models.FloatField(max_length=15)
entry_date=models.DateField()
order_amount=models.FloatField(max_length=10)
net_amount=models.FloatField(max_length=15)
document_type=models.CharField(max_length=20)
class Purchase_items(models.Model):
order_id=models.FloatField(max_length=15)
item_id=models.FloatField(max_length=15)
item_quantity=models.FloatField(max_length=10)
item_rate=models.FloatField(max_length=10)
total_amount=models.FloatField(max_length=15)
Session 2 django material for training at baabtra models
• Now run the synchDB command using the
following command:
• Run python manage.py validate . This
command validates the model.
• python manage.py syncdb
Session 2 django material for training at baabtra models
• Basic data access
– Go to python manage.py shell
– Type the following

>>> from baabtramodel.models import Category
>>> obj_category = Category( category_code =
'Elect', category_description ='All kind of electronics
gadgets')
>>> obj_category .save()
Please note that the above code is used for inserting to
database table without foreign key reference
• Data is saved in the database. You can verify
by going to the database as shown below.
Session 2 django material for training at baabtra models
• Adding two more category objects
>>> obj_category2 = Category( category_code =
'Cod2', category_description ='category desc2')
>>> obj_category3 = Category( category_code =
'cod3', category_description ='category desc3')
>>> obj_category2.save()
>>> obj_category3.save()
• List the objects
>>> category_list = Category.objects.all()
>>> category_list
It lists all the objects along with the code name.
It
• Reason: Copy pasting the model snippet
below
class Category(models.Model):
category_code=models.CharField(max_length=10)
category_description=models.CharField(max_length=300)
def __unicode__(self):
return self.category_code

• The __unicode__(self) is playing the trick. A
__unicode__() method tells Python how to
display the “unicode” representation of an
object. As we have given category_code, we
will get Elect, Cod2 and Cod3 when the
objects are listed.
[<Category: Elect>, <Category:
Cod2>, <Category: cod3>]
• You can add multiple strings to a unicode.
def __unicode__(self):
return u'%s %s' %
(self.category_code, self.category_description)

Then it will print both category code and description as
shown below.
• Updating data in the database.
>>> obj_category2 = Category( category_code =
'Cod2', category_description ='category desc2')
>>> obj_category2 .save()
>>> obj_category2 .id
7 # Depending upon your entry in the table it
can defer.
• From the database

>>> obj_category2.category_code= 'code‘
>>> obj_category2.save()

Again from the database

Please note that cod2 has been changed to ‘code’
Selecting data from the database
• Select * from baabtramodel_category can be
achieved by the following code
• Category.objects.all() #where Category is the
class name in the model.
• Filtering data
>>> Category.objects.filter(category_code='Elect')

>>>Category.objects.filter(category_code='Elect‘, category_descr
iption=‘All kind of electronics gadgets’)

Now change the criteria as
>>>Category.objects.filter(category_code='Elect', category_descr
iption='All kind of electronics gadget') # doesn’t exist any row in
the table which satisfy the criteria
• SQL “like”
>>>Category.objects.filter(category_code__cont
ains ='cod')

Please note that it is case sensitive. Data in the
database
Retrieving single objects
>>> Category.objects.get(id=7)
>>> Category.objects.get(category_code =‘code’)
A query that returns more than two or no records causes an exception
Error:
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "C:Python27libsite-packagesdjangodbmodelsmanager.py", line 143, in
get
return self.get_query_set().get(*args, **kwargs)
File "C:Python27libsite-packagesdjangodbmodelsquery.py", line 407, in g
et
(self.model._meta.object_name, num))
MultipleObjectsReturned: get() returned more than one Category -- it returned 2!
Order by and chaining look ups
For descending
>>>Category.objects.filter(category_code__cont
ains ='cod').order_by("category_description")
For ascending
>>>Category.objects.filter(category_code__cont
ains ='cod').order_by(“category_description”)
Slicing of Data
>>>Category.objects.order_by('category_code')[
0]
Returns only one row.
>>>Category.objects.order_by('category_code')[
0:2]
Updating multiple rows
>>> Category.objects.all().update
(category_code='CodeU')
SQL View:
Inserting data in Django to tables with foreign key
reference.
>>> from baabtramodel.models import Item
>>> obj_item = Item( item_name=
'pen', item_code='p', item_barcode
='bc001', item_description ='Used for
writing', item_cost = 10, item_retail_price =15
, item_category_id =1)
• Error
• Traceback (most recent call last):
– File “<console>”, line 1, in <module>
– File “C:Python27…. base.py”, line 403, in __init__
• setattr(self, field.name, rel_obj)
– File “C:Python27….related.py”, line 405, in __set__
• Self.field_name, self.field.rel.to._meta.object_name)

– ValueError: Cannot assign “1”: “Item.item_category_id”
must be a “Category” instance.
Fix
• Create an instance of the Category.
>>> from baabtramodel.models import Category
>>> category_id = Category.objects.get(id=1)
>>> from baabtramodel.models import Item
>>> obj_item = Item( item_name=
'pen', item_code='p', item_barcode
='bc001', item_description ='Used for writing', item_cost
= 10, item_retail_price =15 , item_category_id
=category_id )
Please note that category_id is an instance and not the
variable inside the object.
Session 2 django material for training at baabtra models
• From a sample application
views.py
• Please note that we are passing categoryid
directly here. It must be changed to an
instance.
Updated views.py
• Please note that Id is an instance of the class
Category
• The author takes corporate trainings in
Android, Java, JQuery, JavaScript and Python. In case
if your organization needs training, please connect
through www.massbaab.com/baabtra.
• Baabtra provides both online and offline trainings for
candidates who want to learn latest programming
technologies , frameworks like
codeigniter, django, android, iphone app
development
• Baabtra also provides basic training in
SQL, .NET, PHP, Java and Python who wants to start
their career in IT.
Session 2 django material for training at baabtra models

More Related Content

PDF
Implementation of EAV pattern for ActiveRecord models
PPTX
EAV Sytem- Magento EAV Model
PDF
Sql server query collection
PPT
Entity Attribute Value (Eav)
ODP
Ruby on rails
PDF
FormsKit: reactive forms driven by state. UA Mobile 2017.
PDF
Taming forms with React
PDF
Eureka - elegant iOs form builder in swift (johnp - mingle)
Implementation of EAV pattern for ActiveRecord models
EAV Sytem- Magento EAV Model
Sql server query collection
Entity Attribute Value (Eav)
Ruby on rails
FormsKit: reactive forms driven by state. UA Mobile 2017.
Taming forms with React
Eureka - elegant iOs form builder in swift (johnp - mingle)

What's hot (20)

DOCX
Python Metaclasses
PPTX
Tutorial: Develop an App with the Odoo Framework
PPT
SQL200.3 Module 3
PDF
Practical Object Oriented Models In Sql
PDF
SQL Server 2008 R2 System Views Map
PDF
Sql server 2008_system_views_poster
PPT
Form demoinplaywithmysql
PDF
Odoo - Business intelligence: Develop cube views for your own objects
PPTX
PyCon SG x Jublia - Building a simple-to-use Database Management tool
DOCX
R Language
PDF
Wicket KT part 2
DOCX
Learning sql from w3schools
PDF
Django Admin (Python meeutp)
PPTX
Table views
PPT
AVB202 Intermediate Microsoft Access VBA
PDF
Start your app the better way with Styled System
PPT
SQL202.2 Accelerated Introduction to SQL Using SQL Server Module 2
PDF
WooCommerce CRUD and Data Store by Akeda Bagus
PDF
OQL querying and indexes with Apache Geode (incubating)
PPTX
ADO.NET Entity Framework by Jose A. Blakeley and Michael Pizzo
Python Metaclasses
Tutorial: Develop an App with the Odoo Framework
SQL200.3 Module 3
Practical Object Oriented Models In Sql
SQL Server 2008 R2 System Views Map
Sql server 2008_system_views_poster
Form demoinplaywithmysql
Odoo - Business intelligence: Develop cube views for your own objects
PyCon SG x Jublia - Building a simple-to-use Database Management tool
R Language
Wicket KT part 2
Learning sql from w3schools
Django Admin (Python meeutp)
Table views
AVB202 Intermediate Microsoft Access VBA
Start your app the better way with Styled System
SQL202.2 Accelerated Introduction to SQL Using SQL Server Module 2
WooCommerce CRUD and Data Store by Akeda Bagus
OQL querying and indexes with Apache Geode (incubating)
ADO.NET Entity Framework by Jose A. Blakeley and Michael Pizzo
Ad

Similar to Session 2 django material for training at baabtra models (20)

PDF
The Django Book chapter 5 Models
KEY
Introduction to Django
PDF
PDF
Django 1.1 Tour
PDF
django
PDF
The Django Book - Chapter 5: Models
PDF
Django design-patterns
PDF
Unbreaking Your Django Application
PPT
Django Models
PPTX
The Django Web Application Framework 2
PPTX
The Django Web Application Framework 2
PPTX
The Django Web Application Framework 2
PPTX
The Django Web Application Framework 2
PDF
Data herding
PDF
Data herding
KEY
Django Pro ORM
PDF
Django 1.10.3 Getting started
PDF
Django Good Practices
ODP
Django tech-talk
PDF
Django tutorial
The Django Book chapter 5 Models
Introduction to Django
Django 1.1 Tour
django
The Django Book - Chapter 5: Models
Django design-patterns
Unbreaking Your Django Application
Django Models
The Django Web Application Framework 2
The Django Web Application Framework 2
The Django Web Application Framework 2
The Django Web Application Framework 2
Data herding
Data herding
Django Pro ORM
Django 1.10.3 Getting started
Django Good Practices
Django tech-talk
Django tutorial
Ad

More from baabtra.com - No. 1 supplier of quality freshers (20)

PPTX
Agile methodology and scrum development
PDF
Acquiring new skills what you should know
PDF
Baabtra.com programming at school
PDF
99LMS for Enterprises - LMS that you will love
PPTX
Chapter 6 database normalisation
PPTX
Chapter 5 transactions and dcl statements
PPTX
Chapter 4 functions, views, indexing
PPTX
PPTX
Chapter 2 grouping,scalar and aggergate functions,joins inner join,outer join
PPTX
Chapter 1 introduction to sql server
PPTX
Chapter 1 introduction to sql server
Agile methodology and scrum development
Acquiring new skills what you should know
Baabtra.com programming at school
99LMS for Enterprises - LMS that you will love
Chapter 6 database normalisation
Chapter 5 transactions and dcl statements
Chapter 4 functions, views, indexing
Chapter 2 grouping,scalar and aggergate functions,joins inner join,outer join
Chapter 1 introduction to sql server
Chapter 1 introduction to sql server

Recently uploaded (20)

PPTX
1. Introduction to Computer Programming.pptx
PDF
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
PDF
Electronic commerce courselecture one. Pdf
PDF
Encapsulation_ Review paper, used for researhc scholars
PDF
Video forgery: An extensive analysis of inter-and intra-frame manipulation al...
PPTX
Big Data Technologies - Introduction.pptx
PDF
Getting Started with Data Integration: FME Form 101
PDF
Mobile App Security Testing_ A Comprehensive Guide.pdf
PDF
Empathic Computing: Creating Shared Understanding
PPTX
SOPHOS-XG Firewall Administrator PPT.pptx
PDF
Diabetes mellitus diagnosis method based random forest with bat algorithm
PPTX
MYSQL Presentation for SQL database connectivity
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
PPTX
Tartificialntelligence_presentation.pptx
PDF
Reach Out and Touch Someone: Haptics and Empathic Computing
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
The Rise and Fall of 3GPP – Time for a Sabbatical?
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
1. Introduction to Computer Programming.pptx
TokAI - TikTok AI Agent : The First AI Application That Analyzes 10,000+ Vira...
Electronic commerce courselecture one. Pdf
Encapsulation_ Review paper, used for researhc scholars
Video forgery: An extensive analysis of inter-and intra-frame manipulation al...
Big Data Technologies - Introduction.pptx
Getting Started with Data Integration: FME Form 101
Mobile App Security Testing_ A Comprehensive Guide.pdf
Empathic Computing: Creating Shared Understanding
SOPHOS-XG Firewall Administrator PPT.pptx
Diabetes mellitus diagnosis method based random forest with bat algorithm
MYSQL Presentation for SQL database connectivity
Spectral efficient network and resource selection model in 5G networks
Assigned Numbers - 2025 - Bluetooth® Document
Build a system with the filesystem maintained by OSTree @ COSCUP 2025
Tartificialntelligence_presentation.pptx
Reach Out and Touch Someone: Haptics and Empathic Computing
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
The Rise and Fall of 3GPP – Time for a Sabbatical?
Per capita expenditure prediction using model stacking based on satellite ima...

Session 2 django material for training at baabtra models

  • 2. Models in Django Courtesy: djangoBook.com Haris NP haris@baabtra.com www.facebook.com/haris.np 9 twitter.com/np_haris in.linkedin.com/in/harisnp
  • 3. MVC v/s MTV • Model – Data access layer. • View – Presentation Layer. What the user sees. • Controller – Business Logic Layer. This layer decides which view to use based on the user input and which model to access.
  • 4. MTV • M stands for Model • T stands for Template. This is presentation layer. • V stands for View. It is different from the MVC architecture. It contains the business logic layer. It access the model and calls the Template as per the clicks.
  • 5. Connecting to the database • Settings.py DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'. 'NAME': 'baabtra', # Or path to database file if using sqlite3. This is the name of the database. # The following settings are not used with sqlite3: 'USER': 'root', 'PASSWORD': 'itsbaabtra', 'HOST': 'localhost', # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP. 'PORT': '3306', # Set to empty string for default. } }
  • 6. Screenshot of Database properties from settings.py page (mysql)
  • 7. Check the connectivity • Go to the command prompt • Traverse to the project folder Type : python manage.py shell
  • 8. • Type – from django.db import connection – cursor = connection.cursor() If there is no error, then you have configured it correctly.
  • 9. Project v/s App in Django • Project: Set of multiple apps with its configuration. • App: Set of Django functionality. Apps are portable and reusable across multiple projects. • For starting an app, please use the following command python manage.py startapp nameoftheapp
  • 10. • python manage.py startapp baabtramodel
  • 12. • Models – It is the description of the data in your database. – It is written in python code. – It is equivalent to CREATE TABLE. If the table doesn’t exist, when the project is synched with the database that you are creating, the tables are created. If you want to migrate your application from MySQL to Postgres, you don’t have to rewrite the SQL codes again. – Since the SQL Codes are written in the python, version control of database is easy. If there are modifications to the existing database, it might create out of sync problems.
  • 13. • Sample Model class Category(models.Model): category_code=models.CharField(max_length=10) category_description=models.CharField(max_length=300) def __unicode__(self): return self.category_code class Item(models.Model): item_name=models.CharField(max_length=200) item_code=models.CharField(max_length=10) item_barcode=models.CharField(max_length=20) item_description=models.CharField(max_length=300) item_cost=models.FloatField(max_length=10) item_retail_price=models.FloatField(max_length=10) item_category_id=models.ForeignKey(Category) def __unicode__(self): return self.item_name class Supplier(models.Model): supplier_name=models.CharField(max_length=50) supplier_code=models.CharField(max_length=10) credit_period=models.CharField(max_length=50) credit_limit=models.FloatField(max_length=10) class Purchase_order(models.Model): supplier_code=models.FloatField(max_length=15) entry_date=models.DateField() order_amount=models.FloatField(max_length=10) net_amount=models.FloatField(max_length=15) document_type=models.CharField(max_length=20) class Purchase_items(models.Model): order_id=models.FloatField(max_length=15) item_id=models.FloatField(max_length=15) item_quantity=models.FloatField(max_length=10) item_rate=models.FloatField(max_length=10) total_amount=models.FloatField(max_length=15)
  • 15. • Now run the synchDB command using the following command: • Run python manage.py validate . This command validates the model. • python manage.py syncdb
  • 17. • Basic data access – Go to python manage.py shell – Type the following >>> from baabtramodel.models import Category >>> obj_category = Category( category_code = 'Elect', category_description ='All kind of electronics gadgets') >>> obj_category .save() Please note that the above code is used for inserting to database table without foreign key reference
  • 18. • Data is saved in the database. You can verify by going to the database as shown below.
  • 20. • Adding two more category objects >>> obj_category2 = Category( category_code = 'Cod2', category_description ='category desc2') >>> obj_category3 = Category( category_code = 'cod3', category_description ='category desc3') >>> obj_category2.save() >>> obj_category3.save()
  • 21. • List the objects >>> category_list = Category.objects.all() >>> category_list It lists all the objects along with the code name. It
  • 22. • Reason: Copy pasting the model snippet below class Category(models.Model): category_code=models.CharField(max_length=10) category_description=models.CharField(max_length=300) def __unicode__(self): return self.category_code • The __unicode__(self) is playing the trick. A __unicode__() method tells Python how to display the “unicode” representation of an object. As we have given category_code, we will get Elect, Cod2 and Cod3 when the objects are listed. [<Category: Elect>, <Category: Cod2>, <Category: cod3>]
  • 23. • You can add multiple strings to a unicode. def __unicode__(self): return u'%s %s' % (self.category_code, self.category_description) Then it will print both category code and description as shown below.
  • 24. • Updating data in the database. >>> obj_category2 = Category( category_code = 'Cod2', category_description ='category desc2') >>> obj_category2 .save() >>> obj_category2 .id 7 # Depending upon your entry in the table it can defer.
  • 25. • From the database >>> obj_category2.category_code= 'code‘ >>> obj_category2.save() Again from the database Please note that cod2 has been changed to ‘code’
  • 26. Selecting data from the database • Select * from baabtramodel_category can be achieved by the following code • Category.objects.all() #where Category is the class name in the model.
  • 27. • Filtering data >>> Category.objects.filter(category_code='Elect') >>>Category.objects.filter(category_code='Elect‘, category_descr iption=‘All kind of electronics gadgets’) Now change the criteria as >>>Category.objects.filter(category_code='Elect', category_descr iption='All kind of electronics gadget') # doesn’t exist any row in the table which satisfy the criteria
  • 28. • SQL “like” >>>Category.objects.filter(category_code__cont ains ='cod') Please note that it is case sensitive. Data in the database
  • 29. Retrieving single objects >>> Category.objects.get(id=7) >>> Category.objects.get(category_code =‘code’) A query that returns more than two or no records causes an exception Error: Traceback (most recent call last): File "<console>", line 1, in <module> File "C:Python27libsite-packagesdjangodbmodelsmanager.py", line 143, in get return self.get_query_set().get(*args, **kwargs) File "C:Python27libsite-packagesdjangodbmodelsquery.py", line 407, in g et (self.model._meta.object_name, num)) MultipleObjectsReturned: get() returned more than one Category -- it returned 2!
  • 30. Order by and chaining look ups For descending >>>Category.objects.filter(category_code__cont ains ='cod').order_by("category_description") For ascending >>>Category.objects.filter(category_code__cont ains ='cod').order_by(“category_description”)
  • 31. Slicing of Data >>>Category.objects.order_by('category_code')[ 0] Returns only one row. >>>Category.objects.order_by('category_code')[ 0:2]
  • 32. Updating multiple rows >>> Category.objects.all().update (category_code='CodeU') SQL View:
  • 33. Inserting data in Django to tables with foreign key reference. >>> from baabtramodel.models import Item >>> obj_item = Item( item_name= 'pen', item_code='p', item_barcode ='bc001', item_description ='Used for writing', item_cost = 10, item_retail_price =15 , item_category_id =1)
  • 34. • Error • Traceback (most recent call last): – File “<console>”, line 1, in <module> – File “C:Python27…. base.py”, line 403, in __init__ • setattr(self, field.name, rel_obj) – File “C:Python27….related.py”, line 405, in __set__ • Self.field_name, self.field.rel.to._meta.object_name) – ValueError: Cannot assign “1”: “Item.item_category_id” must be a “Category” instance.
  • 35. Fix • Create an instance of the Category. >>> from baabtramodel.models import Category >>> category_id = Category.objects.get(id=1) >>> from baabtramodel.models import Item >>> obj_item = Item( item_name= 'pen', item_code='p', item_barcode ='bc001', item_description ='Used for writing', item_cost = 10, item_retail_price =15 , item_category_id =category_id ) Please note that category_id is an instance and not the variable inside the object.
  • 37. • From a sample application
  • 38. views.py • Please note that we are passing categoryid directly here. It must be changed to an instance.
  • 39. Updated views.py • Please note that Id is an instance of the class Category
  • 40. • The author takes corporate trainings in Android, Java, JQuery, JavaScript and Python. In case if your organization needs training, please connect through www.massbaab.com/baabtra. • Baabtra provides both online and offline trainings for candidates who want to learn latest programming technologies , frameworks like codeigniter, django, android, iphone app development • Baabtra also provides basic training in SQL, .NET, PHP, Java and Python who wants to start their career in IT.