Download - Relationships in Django ORM
![Page 1: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/1.jpg)
Relationships in Django ORM@starwilly
![Page 2: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/2.jpg)
Outline
• Single model ( Django girls tutorial )
• Relationship
• 1. many-to-one ( )
• 2. many-to-many (Tag)
• What does it looks like in database
• How to define relationship
• Traverse / query / create / delete relation
![Page 3: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/3.jpg)
A Simple Django Model
![Page 4: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/4.jpg)
CRUD (Create, Read, Update, Delete)
Post.objects.create(title='My First Trip', content=‘ ?', location=' ')
Post.objects.all()
[<Post: My First Trip>, <Post: My Second Trip>, <Post: Django >]
Post.objects.filter(pk__gt=1)
[<Post: My Second Trip>, <Post: Django >]
![Page 5: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/5.jpg)
CRUD
posts = Post.objects.filter(pk__lt=3)
[<Post: My First Trip>, <Post: My Second Trip>]
posts.update(location=‘ ')
2
posts.delete()
![Page 6: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/6.jpg)
Model : Table
id title content photo location created_at1 …2 …
![Page 7: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/7.jpg)
Relationship
• many-to-one
• many-to-many
![Page 8: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/8.jpg)
Many-to-one Relationship
![Page 9: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/9.jpg)
•
•
• 1.
• 2.
Alan:
Bob:
Cindy:
![Page 10: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/10.jpg)
Model
![Page 11: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/11.jpg)
Many-to-one Relationship
•
PostComment
•
1m
![Page 12: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/12.jpg)
ForeignKey
• (many-to-one)
ForeignKey(othermodel, **options)
![Page 13: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/13.jpg)
Use Foreign Key to Define m:1
Comment Post
![Page 14: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/14.jpg)
id author content1 Alan …2 Bob …3 Cindy …4 Denny5
id title content1 …2 …
![Page 15: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/15.jpg)
id post_id author content1 1 Alan …2 1 Bob …3 1 Cindy …4 2 Denny5 2 Alan
id title content1 …2 …
![Page 16: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/16.jpg)
Query m:1 Relationship
![Page 17: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/17.jpg)
id = 1
Alan:
Bob:
Cindy:
![Page 18: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/18.jpg)
Traverse many-to-one relationship
id (pk) = 1post1 = Post.objects.get(pk=1)
comments = Comment.objects.filter(post_id=1)
comments = Comment.objects.filter(post=post1)
[<Comment: Alan: >, <Comment: Bob: >, <Comment: Cindy: >]
![Page 19: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/19.jpg)
Traverse many-to-one relationship
id (pk) = 1post1 = Post.objects.get(pk=1)
comments = post1.comment_set.all()
<Model>_set
[<Comment: Alan: >, <Comment: Bob: >, <Comment: Cindy: >]
![Page 20: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/20.jpg)
Associate Post and Comment
post = Post.objects.get(pk=1)
comment = Comment(author=‘Billy’, content=‘hi’)
post.comment_set.add(comment)
![Page 21: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/21.jpg)
Remove Comment from Post
post1 = Post.objects.get(pk=1)post1.comment_set.all()
[<Comment: Alan: >, <Comment: Bob: >, <Comment: Cindy: >]
c = Comment.objects.get(pk=1)
<Comment: Alan: >
c.delete()
post.comment_set.all()
[<Comment: Bob: >, <Comment: Cindy: >]
![Page 22: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/22.jpg)
ForeignKey.related_name
comment_list = post.comment_set.all()
comment_list = post.comments.all()
![Page 23: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/23.jpg)
Foreign Key
• (many-to-one relationship)
• <model>_set
• related_name
• add()
![Page 24: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/24.jpg)
Many-to-many Relationships
![Page 25: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/25.jpg)
Tag
myblog.com/post/1
myblog.com/tag/food
![Page 26: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/26.jpg)
What is Many-to-many Relationship
Post Tag
• tag
• tag
n m
![Page 27: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/27.jpg)
Tag Model
![Page 28: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/28.jpg)
SlugField
• CharField
• (hyphen)
• • myblog.com/tags/ (X)
• myblog.com/tags/food (O)
• myblog.com/posts/[ ] (X)
• myblog.com/posts/a-wonderful-trip-in-japan (O)
![Page 29: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/29.jpg)
Tag Table
id name slug1 food2 japan3 taiwan-north4 taipei
… …taipei
![Page 30: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/30.jpg)
id title content1 …2 …
Post
Tag
, ,
id name slug1 food2 japan3 taiwan-north4 taipei
… …
![Page 31: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/31.jpg)
id title content tags1 … 1, 3, 42 … 2
Post
Tag
, ,
id name slug1 food2 japan3 taiwan-north4 taipei
… …
![Page 32: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/32.jpg)
id title content1 …2 …
Post
Tag
, ,
id name slug1 food2 japan3 taiwan-north4 taipei
… …
id post_id tag_id1 1 12 2 23 1 34 1 4
![Page 33: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/33.jpg)
ManyToManyField
ManyToManyField(othermodel, **options)
tags = models.ManyToManyField('Tag', blank=True)
![Page 34: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/34.jpg)
ManyToManyField
•
• Django m2m
ManyToManyField(othermodel, **options)
![Page 35: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/35.jpg)
id title content1 …2 …
id name slug1 food2 japan… … …
id post_id tag_id1 1 12 2 23 1 34 1 4
![Page 36: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/36.jpg)
Query M2M Relationship
from trips.models import Post, Tag
post1 = Post.objects.get(pk=1)
<Post: >
post1.tags.all()
[<Tag: >, <Tag: >]
![Page 37: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/37.jpg)
Query M2M Relationship
from trips.models import Post, Tag
tag_food = Tag.objects.get(pk=1)
<Tag: >
tag_food.post_set.all()
[<Post: >]
![Page 38: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/38.jpg)
ManyToManyField.related_name
tag_food = Tag.objects.get(pk=1)
tag_food.post_set.all()
tag_food.posts.all()
![Page 39: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/39.jpg)
Create M2M Relationship
from trips.models import Post, Tag
post1 = Post.objects.get(pk=1)
tag_japan = Tag.objects.create(name=‘ ’, slug=‘japan’)
tag_food = Tag.objects.get(slug=‘food’)
post1.tags.add(tag_japan)
tag_food.post_set.add(post1)
![Page 40: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/40.jpg)
Remove M2M Relationship
from trips.models import Post, Tag
tag_japan = Tag.objects.get(slug=‘japan’)
post1 = Post.objects.get(pk=1)
post1.tags.remove(tag_japan)
tag_japan.post_set.remove(post1)
![Page 41: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/41.jpg)
Filter M2M Relationshipfrom trips.models import Post, Tag
tag_japan = Tag.objects.get(slug=‘japan’)tag_food = Tag.objects.get(slug=‘food’)
tag_japan.post_set.all()
# [<Post: >]
Post.objects.filter(tags=tag_japan)
# [<Post: >]
Post.objects.filter(tags__in=[tag_japan, tag_food])
#[<Post: >, <Post: >]
![Page 42: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/42.jpg)
ManyToManyField
•
• Table (Mapping)
• releated_name
• add() , remove()
• https://docs.djangoproject.com/en/1.9/ref/models/relations/
![Page 43: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/43.jpg)
Get your hand dirty
• Tag
• Tag
•
• Tag
• Tag Tag
![Page 44: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/44.jpg)
Tips:
djangogirls/mysite/templates/post.html
![Page 45: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/45.jpg)
Tips: Tag
djangogirls/mysite/templates/post.html
![Page 46: Relationships in Django ORM](https://reader033.vdocuments.us/reader033/viewer/2022052915/58f31f931a28ab701e8b4607/html5/thumbnails/46.jpg)
Tips: Tag
url(r'^tag/(?P<slug>[\w-]+)/$', tag_detail, name='tag_detail'),
djangogirls/mysite/trips/views.py
djangogirls/mysite/templates/tag.html