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 |