KEMBAR78
An Overview of Models in Django | PPTX
An Overview of Models
in Django
Michael Auritt
• Director of Media Production at CorpU
• Self-taught programmer
• Twitter: @mauritt
Django
djangoproject.com
Django
• Models
• Views
• Templates
Django
• Models - Manage our data
• Views - Query the data
• Template - Present the data
Django
• Models - Manage our data
• Views - Query the data
• Template - Present the data
Models
• The single definitive source of information
about your website data
• Uses Django’s Object-relational Mapper
• Each model maps to a single database table
• Each field maps to a column within that table
Talent Management The Happiness Advantage
CorpU Promo
My Video Portfolio
Videos | About | Contact
Supply Chain Management
http://www.myvideoportfolio.com/videos
Supply Chain Management
My Video Portfolio
Videos| About | Contact
http://www.djangodjunction.com/djangos/01
This course explores end-to-end supply
chain management. This video takes a look
at the main elements of a modern supply
chain and…
Supply Chain Management
My Video Portfolio
Videos| About | Contact
http://www.djangodjunction.com/djangos/01
TITLE
DESCRIPTION
Embed
This course explores end-to-end supply
chain management. This video takes a look
at the main elements of a modern supply
chain and…
models.py
from django.db import models
class Video(models.Model):
title = models.CharField(max_length = 200)
description = models.TextField()
embed_key = models.IntegerField()
date_completed = models.DateField()
id(primary
key)
title description embed_key date_completed
Video
id title description embed_key date_completed
1 Ursa Motors In this video… 679210 2014-10-01
2 Sea Box
Sea Box is a
company that…
933750 2015-03-15
3
Critical
Thinking
In Critical
Thinking…
876025 2014-09-23
4 CorpU Promo
CorpU’s
platform…
867302 2015-02-05
video
models.py
from django.db import models
class Video(models.Model):
title = models.CharField(max_length = 200)
description = models.TextField()
embed_key = models.IntegerField()
date_completed = models.DateField()
djangoproject.com
Documentation
Model Field Reference
models.py
from django.db import models
class Video(models.Model):
title = models.CharField(max_length = 200)
description = models.TextField()
embed_key = models.IntegerField()
date_completed = models.DateField()
title = models.CharField(max_length = 200)
hidden = models.BooleanField(default = True)
slug = models.SlugField(unique = True)
Validators
• validate_slug
• EmailValidator
• URLValidator
Validators
(validate = [email_validator])
models.py
from django.db import models
from django.core.exceptions import ValidationError
def validate_embed(value):
valid_embed = (checks embed at vimeo.com)
if not valid_embed:
raise ValidationError(‘That embed code does not
exist at vimeo.com’)
class Video(models.Model):
embed = integerField(validators = [validate_embed])
Field Choices
GENRE_CHOICES = (
(‘DOC’, ‘Documentary’ ),
(‘PRO’, ‘Promo’),
(‘NAR’,’Narrative’),
)
genre = models.CharField(
max_length = 3,
choices = GENRE_CHOICES
)
models.py
from django.db import models
class Video(models.Model):
title = models.CharField(max_length = 200)
description = models.TextField()
embed_key = models.IntegerField()
date_completed = models.DateField()
hidden = models.BooleanField(default = True)
slug = models.SlugField(unique = True)
Relationships
• Many to One
• Many to Many
• One to One
Many to One
One row of a database
table relates to many rows
of another.
title … client
… Client: 01
… Client: 02
… Client: 01
… Client: 03
… Client: 01
… Client: 02
id name website …
01 … …
02 … …
03 …
Video
Client
Many to One
Many to One
class Client(models.Model):
name = models.CharField(unique = True)
website = models.URLField()
class Video(models.Model):
client = models.ForeignKey(Client)
Many to Many
Many rows of a database
table relate to many rows of
another.
… role
…
role: Camera Op,
Editor, Producer
…
role: Camera Op,
Editor
… role: Producer
… role: Editor
name …
Camera Op …
Editor …
Producer …
Video
Role
Many to Many
Many to Many
class Role(models.Model):
name = models.CharField(unique = True)
class Video(models.Model):
role = models.ManyToManyField(Role)
One to One
One row of a database
table relates to one row of
another.
… file
… File: 1
… File: 2
… File 3
… FIle 4
Video
One to One
id path
1
2
3
4
File
One to One
class File(models.Model):
drive = models.CharField()
path = models.FilePathField()
class Video(models.Model):
file = models.OneToOneField(File)
$ python manage.py makemigrations
Migrations
operations = [
migrations.CreateModel(
name='Video',
fields=[
('id', models.AutoField(serialize=False,
primary_key=True, auto_created=True, verbose_name='ID')),
('title', models.CharField(max_length=200)),
('description', models.TextField()),
('embed', models.TextField()),
('company',
models.ForeignKey(to='videos.Company')),
('roles',
models.ManyToManyField(to='videos.Role')),
$ python manage.py migrate
Migrations
operations = [
migrations.AlterField(
model_name='company',
name=‘slug’,
field=models.SlugField(unique=True),
Migration Issues
• Adding new fields without a default
• Adding new unique fields
• Changing relationships
Queries
Returning Many Objects
• Video.objects.all()
• Video.obects.filter(client = ‘MasterCard’)
• Video.objects.all().order_by(‘date_created’)
Queries
Returning Many Objects
MC_Videos = Video.obects.filter(client = ‘MasterCard’)
MC_Ascending_Order = MC_videos.order_by(‘title’)
MC_Descending_Order = MC_videos.order_by(‘-title’)
Queries
Returning Many Objects
MC_videos = Video.obects.filter(client = ‘MasterCard’)
MC_videos = MC_videos.order_by(‘date_created’)
MC_videos = MC_videos.exclude(Role = ‘Producer’)
Field Lookups
field__lookuptype=value
.filter(title__startswith=‘G’)
.filter(date_completed__gte=datetime(2015,01,01))
.filter(title__contains = ‘Supply Chain’)
Queries
Returning Single Objects
• Video.objects.get(pk = 1)
• Video.objects.get(title = ‘My Best Video’)
Queries
• QuerySet API Reference in Django Docs
• QuerySets are lazy
• QuerySets are faster than using Python
Queries
>>>from video.models import Video
>>> v = Video.objects.get(pk = 1)
>>> print(v)
<Video: Video object>
Model Methods
from django.db import models
class Video(models.Model):
title = models.CharField(max_length = 200)
def __str__(self):
return self.title
Queries
>>>from video.models import Video
>>> v = Video.objects.get(pk = 1)
>>> print(v)
<Video: Talent Management>
Model Methods
class Role(models.Model):
name = models.CharField(unique = True)
class Video(models.Model):
def is_full_stack(self):
full_stack = True
for role in Role.objects.all():
if role not in self.role.all():
full_stack = False
return full_stack
Model Methods
>>>from video.models import Video
>>> v = Video.get(pk = 1)
>>> v.is_full_stack()
True
Views.py
def detail(request, slug):
try:
video = Video.Objects.get(slug = slug)
except video.DoesNotExist:
raise Http404()
else:
context = {‘video’: video}
return render(request, ‘videos/detail.html’, context)
Model Manager
video.objects.all()
Model Manager
video.objects.all()
models.Manger
Thanks
Further Reading
• djangoproject.com
• Two Scoops of Django
(TwoScoopsPress.com)
• Lightweight Django (O’Reilly)

An Overview of Models in Django

Editor's Notes

  • #3 Not from a programming background Give Talk to learn more about Django You should give a talk
  • #4 We’re here tonight to talk about Django Models I know a lot of you are learning Python Polls tutorial db —> models —> view —> template —> html
  • #8 Models are python objects To understand that, let’s think of a finished website I work in video
  • #9 List view of videos
  • #12 a subclass of Django’s model object in that model is contained a set of fields each field type accepts a different type of data
  • #13 id field primary key
  • #15 List of fields is not exhaustive
  • #17 Looking good
  • #20 How does Django make sure slugs are formatted correctly? Built in validators
  • #22 passed in as list contradictory validators
  • #40 If we add a new field to an already populated DB table Django is going to want to fill in that field for each row that exists
  • #46 So we have all of our queries set, but there’s a problem