Models in Django
Courtesy: djangoBook.com
Haris NP
haris@baabtra.com
www.facebook.com/haris.np
9
twitter.com/np_haris
in.l...
MVC v/s MTV
• Model – Data access layer.
• View – Presentation Layer. What the user sees.
• Controller – Business Logic La...
MTV
• M stands for Model
• T stands for Template. This is presentation
layer.
• V stands for View. It is different from th...
Connecting to the database
• Settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # Add
'postgresq...
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...
Project v/s App in Django
• Project: Set of multiple apps with its
configuration.
• App: Set of Django functionality. Apps...
• 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 CREAT...
• Sample Model
class Category(models.Model):
category_code=models.CharField(max_length=10)
category_description=models.Cha...
• Now run the synchDB command using the
following command:
• Run python manage.py validate . This
command validates the mo...
• Basic data access
– Go to python manage.py shell
– Type the following

>>> from baabtramodel.models import Category
>>> ...
• Data is saved in the database. You can verify
by going to the database as shown below.
• Adding two more category objects
>>> obj_category2 = Category( category_code =
'Cod2', category_description ='category d...
• List the objects
>>> category_list = Category.objects.all()
>>> category_list
It lists all the objects along with the co...
• Reason: Copy pasting the model snippet
below
class Category(models.Model):
category_code=models.CharField(max_length=10)...
• You can add multiple strings to a unicode.
def __unicode__(self):
return u'%s %s' %
(self.category_code, self.category_d...
• Updating data in the database.
>>> obj_category2 = Category( category_code =
'Cod2', category_description ='category des...
• From the database

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

Again from the database

Please not...
Selecting data from the database
• Select * from baabtramodel_category can be
achieved by the following code
• Category.ob...
• Filtering data
>>> Category.objects.filter(category_code='Elect')

>>>Category.objects.filter(category_code='Elect‘, cat...
• SQL “like”
>>>Category.objects.filter(category_code__cont
ains ='cod')

Please note that it is case sensitive. Data in t...
Retrieving single objects
>>> Category.objects.get(id=7)
>>> Category.objects.get(category_code =‘code’)
A query that retu...
Order by and chaining look ups
For descending
>>>Category.objects.filter(category_code__cont
ains ='cod').order_by("catego...
Slicing of Data
>>>Category.objects.order_by('category_code')[
0]
Returns only one row.
>>>Category.objects.order_by('cate...
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 = Ite...
• Error
• Traceback (most recent call last):
– File “<console>”, line 1, in <module>
– File “C:Python27…. base.py”, line 4...
Fix
• Create an instance of the Category.
>>> from baabtramodel.models import Category
>>> category_id = Category.objects....
• 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...
Session 2 django material for training at baabtra models
Session 2 django material for training at baabtra models
Session 2 django material for training at baabtra models
Session 2 django material for training at baabtra models
Session 2 django material for training at baabtra models
Session 2 django material for training at baabtra models
Upcoming SlideShare
Loading in...5
×

Session 2 django material for training at baabtra models

980

Published on

This is for candidates who wants to learn models in django. Python version used is 2.7 and the database used is MySQL. Operating system is Windows 8.

Published in: Technology, Art & Photos
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
980
On Slideshare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Session 2 django material for training at baabtra models

  1. 1. 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
  2. 2. 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.
  3. 3. 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.
  4. 4. 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. } }
  5. 5. Screenshot of Database properties from settings.py page (mysql)
  6. 6. Check the connectivity • Go to the command prompt • Traverse to the project folder Type : python manage.py shell
  7. 7. • Type – from django.db import connection – cursor = connection.cursor() If there is no error, then you have configured it correctly.
  8. 8. 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
  9. 9. • python manage.py startapp baabtramodel
  10. 10. INSTALLED_APP
  11. 11. • 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.
  12. 12. • 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)
  13. 13. • Now run the synchDB command using the following command: • Run python manage.py validate . This command validates the model. • python manage.py syncdb
  14. 14. • 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
  15. 15. • Data is saved in the database. You can verify by going to the database as shown below.
  16. 16. • 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()
  17. 17. • List the objects >>> category_list = Category.objects.all() >>> category_list It lists all the objects along with the code name. It
  18. 18. • 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>]
  19. 19. • 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.
  20. 20. • 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.
  21. 21. • From the database >>> obj_category2.category_code= 'code‘ >>> obj_category2.save() Again from the database Please note that cod2 has been changed to ‘code’
  22. 22. 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.
  23. 23. • 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
  24. 24. • SQL “like” >>>Category.objects.filter(category_code__cont ains ='cod') Please note that it is case sensitive. Data in the database
  25. 25. 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!
  26. 26. 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”)
  27. 27. Slicing of Data >>>Category.objects.order_by('category_code')[ 0] Returns only one row. >>>Category.objects.order_by('category_code')[ 0:2]
  28. 28. Updating multiple rows >>> Category.objects.all().update (category_code='CodeU') SQL View:
  29. 29. 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)
  30. 30. • 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.
  31. 31. 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.
  32. 32. • From a sample application
  33. 33. views.py • Please note that we are passing categoryid directly here. It must be changed to an instance.
  34. 34. Updated views.py • Please note that Id is an instance of the class Category
  35. 35. • 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.
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×