Date post: | 15-Apr-2017 |
Category: |
Internet |
Upload: | michael-auritt |
View: | 268 times |
Download: | 0 times |
An Overview of Models in Django
Michael Auritt
• Director of Media Production at CorpU
• Self-taught programmer
• Twitter: @mauritt
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 PortfolioVideos | About | Contact
Supply Chain Management
http://www.myvideoportfolio.com/videos
Supply Chain Management
My Video PortfolioVideos| 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 PortfolioVideos| 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 descriptio
n embed_key date_completed
Video
id title description embed_key date_completed
1 Ursa Motors In this video… 679210 2014-10-01
2 Sea BoxSea Box is a
company that…
933750 2015-03-15
3Critical
ThinkingIn 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()
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.pyfrom django.db import modelsfrom 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 ChoicesGENRE_CHOICES = ( (‘DOC’, ‘Documentary’ ), (‘PRO’, ‘Promo’), (‘NAR’,’Narrative’),)
genre = models.CharField( max_length = 3, choices = GENRE_CHOICES)
models.pyfrom 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 …
VideoClient
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 …
VideoRole
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
VideoOne 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
QueriesReturning Many Objects
• Video.objects.all()
• Video.obects.filter(client = ‘MasterCard’)
• Video.objects.all().order_by(‘date_created’)
QueriesReturning 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’)
QueriesReturning 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 Lookupsfield__lookuptype=value
.filter(title__startswith=‘G’)
.filter(date_completed__gte=datetime(2015,01,01))
.filter(title__contains = ‘Supply Chain’)
QueriesReturning 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 Methodsfrom 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 Methodsclass 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)