Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Session 2 django material for training at baabtra models
1.
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.
}
}
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
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)
14.
15. • Now run the synchDB command using the
following command:
• Run python manage.py validate . This
command validates the model.
• python manage.py syncdb
16.
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.
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
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”)
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.
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.