본문 바로가기
Django/Django Vanila

11. Django Shell

by S.T.Lee 2022. 5. 30.

Django Shell은 Django의 기능들을 코딩 없이 사용할 수 있게 해주는 기능이다. 주로 데이터를 확인하고 테스트 해보는 용도로 사용된다.

python manage.py shell
>>> #이게 나오면 정상 실행된것이다.
>>> from restaurant.models import MyTopping, MyPizza 
>>> MyPizza.objects.all()
<QuerySet [<MyPizza: Prperoni Pizza>, <MyPizza: Cheese Pizza>, <MyPizza: Chicken Pizza>, <MyPizza: Pepper Pizza>]>
>>> MyPizza.objects.get(pizza_name='Prperoni Pizza')
<MyPizza: Prperoni Pizza>
>>> MyPizza.objects.get(pizza_name='Cheese Pizza')
<MyPizza: Cheese Pizza>
>>> MyPizza.objects.get(pizza_name='Cheese Pizza').pizza_topping.all()
<QuerySet [<MyTopping: Cheese>, <MyTopping: Pepper>]>

 

당연하겠지만 .pizza_topping, .pizza_name은 restaurant/models.py에 저장된 내용으로 나오는 것이다.

비교를 위해 코드를 다시 작성해두겠다.

# restaurant/models.py
from django.db import models


# Create your models here.

class MyTopping(models.Model):
    class Meta:
        db_table = "my_topping"

    def __str__(self):
        return self.topping_name

    topping_name = models.CharField(max_length=100)


class MyPizza(models.Model):
    class Meta:
        db_table = "my_pizza"

    def __str__(self):
        return self.pizza_name

    pizza_name = models.CharField(max_length=100)
    pizza_topping = models.ManyToManyField(MyTopping)

 

이제 many-to-many의 기능을 보여주기 위해 토핑에서 피자를 불러오도록 하자.

>>> MyPizza.objects.get(pizza_name='Cheese Pizza').pizza_topping.all()
<QuerySet [<MyTopping: Cheese>, <MyTopping: Pepper>]>
>>> MyTopping.objects.all()
<QuerySet [<MyTopping: Cheese>, <MyTopping: Chicken>, <MyTopping: Peperoni>, <MyTopping: Olive>, <MyTopping: Pepper>]>
>>> MyTopping.objects.get(topping_name='Chicken')
<MyTopping: Chicken>
>>> MyTopping.objects.get(topping_name='Chicken').mypizza_set.all()  
<QuerySet [<MyPizza: Chicken Pizza>]>
>>> MyTopping.objects.get(topping_name='Cheese').mypizza_set.all()  
<QuerySet [<MyPizza: Prperoni Pizza>, <MyPizza: Cheese Pizza>, <MyPizza: Pepper Pizza>]>

.mypizza_set은 ManyToManyField가 작성되지 않은쪽에서 작성된 쪽을 불러올때 db에 작성된 내용으로 불러오는 듯하다.

만약 one-to-many였으면 many쪽에서 one을 불러오는것이 어렵다.

근데 _set은 어디서 나온걸까? 쉽게 말하면 참조한 내용을 볼때 나오는것이다.(눈치가 빠르면 알 수 있겠지만 전부 소문자로 바꿔서 써줘야한다.)

이는 related_name과 관련이 있는데 뒷 강에 나올 예정이므로 거기서 설명을 하겠다.

'Django > Django Vanila' 카테고리의 다른 글

13. 서비스 수정  (0) 2022.05.30
12. Many-To-Many 모델 생성(related_name)  (0) 2022.05.30
10. Django 데이터베이스 관계  (0) 2022.05.30
9. Django 게시글 읽기/삭제  (0) 2022.05.27
8. Django 게시글 쓰기  (0) 2022.05.27