ISOM 350 Business Application Development Mohammad AlMarzouq
Django Data Models
What Are Django Models? Part of the Object-Relational Mapper (ORM) The ORM maps:Data classes to relational database tables Data objects to rows in rational tables Abstract database connections and queriesCan connect to different db types You can write queries in Python Creating Models Subclass django.db.models.ModelGives the db functionality to our class Each attribute is a model FieldUsed to configure the properties of our data Creating Models Start with the ER-Diagram Implement entities as models Implement attributes of entities as fields in models Relationships have special field types to represent them Example ERD %%{init: { 'theme': 'forest' } }%%
erDiagram
CUSTOMER ||--o{ ORDER : places
CUSTOMER {
int id
string name
string email
}
ORDER ||--|{ LINE-ITEM : contains
ORDER {
int id
string delivery_address
datetime placed_at
datetime delivered_at
}
LINE-ITEM {
string product_name
int quantity
float unit_price
}
Customer Model from django.db import models
class Customer(models.Model):
name = models.CharField(max_length=50)
email = models.EmailField()
Order Model class Order(models.Model):
delivery_address = models.CharField(max_length=100)
placed_at = models.DateTimeField(auto_now_add=True)
delivered_at = models.DateTimeField(null=True, blank=True)
placed_by = models.ForeignKey(
'Customer',
on_delete=models.CASCADE,
)
REMEMBER: One to many relationship always placed on the many side! Order Model DateTimeField Vs DateField auto_now_add Vs auto_nowauto_now_add: Set date/time to now upon creation auto_now: Update date/time with every dave null vs blanknull: What can be stored in db blank: Using for input validation (in forms) LineItem Model class LineItem(models.Model):
quantity = models.IntegerField(default=0)
product_name = models.CharField(max_length=100)
unit_price = models.FloatField(default=0)
contained_in = models.ForeignKey(
'Order',
on_delete=models.CASCADE,
)
Important Field Types IntegerField, FloatField, BooleanField CharField, EmailField, URLField, TextField DateField, DateTimeField ForeignKey, OneToOneField, ManyToManyField FileField, ImageField Complete list found in Django Documentation Important Field Options null, blank (Generic) auto_now_add, auto_now (Date/Time specific) unique (True/False) Limiting choices and input data Using choices Field Option Limits data input to specific values Typically used with IntegerField or CharField Can display readable text instead of value Choices are typically a tuple of 2-item tuplesFirst item is input value Second item is display value Preparing the Choices class Post(models.Model):
STATUS = (
(0,"Draft"),
(1,"Publish")
)
title = models.CharField(max_length=200, unique=True)
#...
status = models.IntegerField(choices=STATUS, default=0)
Migrations Models are defined, but we must instruct Django to create database tables We use the migration management commands to prepare the database Every time a model is created or redefined, the migration steps must be performs Using the shell command on replit.com run the following commands:
then
If you have properly installed your app, Django will prepare the database and create the tables After these steps you can start development and building your webapp using these models Just remember, if a change is made to the models or a new model is created, you must run these migration steps again Recommended Readings from Django Documentation