관리 메뉴

웹개발자의 기지개

[Django] ORM - Create, Update, Delete 문 (1:다, 다:다) Model 내에 ForeignKey 와 ManyToManyField 본문

python/Django

[Django] ORM - Create, Update, Delete 문 (1:다, 다:다) Model 내에 ForeignKey 와 ManyToManyField

http://portfolio.wonpaper.net 2022. 5. 1. 00:52

우선 Models.py 의 소스이다.

 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
from django.db import models
 
class Blog(models.Model):
    name = models.CharField(max_length=100)
    tagline = models.TextField()
 
    def __str__(self):
        return self.name
 
 
class Author(models.Model):
    name = models.CharField(max_length=200)
    email = models.EmailField()
 
    def __str__(self):
        return self.name
 
 
class Entry(models.Model):
    blog = models.ForeignKey(Blog, on_delete=models.CASCADE)
    headline = models.CharField(max_length=255)
    body_text = models.TextField()
    pub_date = models.dateField()
    mod_date = models.dateField()
    authors = models.ManyToManyField(Author)
    number_of_comments = models.IntegerField()
    number_of_pingbacks = models.IntegerField()
    raging = models.IntegerField()
 
    def __str__(self):
        return self.headline
 
cs

위에서 중요하게 볼 부분은 20라인 ForeignKey 와 25라인의 ManyToManyField 부분이다.

 

 

1. Create 문

(1) 클래스 객체를 만들어서 save() 함수를 실행

1
2
3
4
from blog.models import Blog
 
= Blog(name='Beatles Blog', tagline='All the latest Beatles news.')
= save()
cs

 

(2) create() 함수를 이용

 

1
= Blog.objects.create(name='Beatles Blog', tagline='All the latest Beatles news.')
cs

 

https://docs.djangoproject.com/en/3.1/ref/models/querysets/#django.db.models.query.QuerySet.create

 

QuerySet API reference | Django documentation | Django

Django The web framework for perfectionists with deadlines. Overview Download Documentation News Community Code Issues About ♥ Donate

docs.djangoproject.com

 

 

2. Update 문

 

1
2
b.name = 'Lee'
b.save()
cs

 

(1) ForeignKey 필드 업데이트

 

1
2
3
4
5
6
7
from blog.models import Blog, Entry
 
entry = Entry.objects.get(pk=1)
cheese_blog = Blog.objects.get(name='Chedar Talk')
entry.blog = cheese_blog
entry.save()
 
cs

 

(2) ManyToMany 필드 업데이트 - add() 이용

 

1
2
3
4
from blog.models import Author
joe = Author.objects.create(name='Joe')
entry.authors.add(joe)
 
cs

 

한꺼번에 add() 이용도 가능하다.

 

1
2
3
4
5
john = Author.objects.create(name='John')
paul = Author.objects.create(name='Paul')
ringo = Author.objects.create(name='Ringo')
 
entry.authors.add(john, paul, ringo)
cs

 

 

3. Delete 문

 

1
2
b.delete()
# (1, {'Entry Go': 1})
cs

리턴값은 지워진 object 전체개수와 dictionary반환( 지워진 object객체이름, 지원진 object객체 개수 ) 한다.

 

 

참고 : https://eunjin3786.tistory.com/337

 

 

Comments