find . -path "*/migrations/*.py" -not -name "__init__.py" -delete
find . -path "*/migrations/*.pyc" -delete
python manage.py makemigrations
python manage.py migrate
🔥 ModuleNotFoundError: No module named 오류
pip install --upgrade --force-reinstall Django
후 새 스키마 생성
1) one-to-many
하나의 글쓴이가 여러 개의 글을 가지고 있는 것
2) one-to-one
데이터 A와 데이터 B가 서로 만나지 않아서 중복이 되지 않는 값을 만들어 내는 것
3) many to many
A모델과 B모델이 있을 때 A가 여러 개의 B를 가질 수도 있고 B가 여러 개의 A를 가질 수도 있을 때 사용하는 모델 ex) 팔로우-팔로잉
👉 서로 불러올 수 있다
django shell에서 사용하기
터미널에서 아래 명령어 실행
python manage.py shell
예) 피자 모델에서 토핑 불러오기
>>> from restaurant.models import MyTopping, MyPizza
#전체 피자
>>> MyPizza.objects.all()
<QuerySet [<MyPizza: 도미노>, <MyPizza: 피자헛>, <MyPizza: 파파존스>]>
# 피자를 하나씩 불러볼게요
>>> MyPizza.objects.get(pizza_name='도미노')
<MyPizza: 도미노>
>>> MyPizza.objects.get(pizza_name='피자헛')
<MyPizza: 피자헛>
>>> MyPizza.objects.get(pizza_name='파파존스')
<MyPizza: 파파존스>
# 각 피자의 토핑들을 불러볼게요
>>> MyPizza.objects.get(pizza_name='도미노').pizza_topping.all()
<QuerySet [<MyTopping: 치즈>, <MyTopping: 치킨>]>
>>> MyPizza.objects.get(pizza_name='피자헛').pizza_topping.all()
<QuerySet [<MyTopping: 치즈>, <MyTopping: 페퍼로니>, <MyTopping: 올리브>]>
>>> MyPizza.objects.get(pizza_name='파파존스').pizza_topping.all()
<QuerySet [<MyTopping: 치즈>, <MyTopping: 페퍼로니>, <MyTopping: 피망>]>
예) 토핑 모델에서 토핑을 가지고 있는 피자 가져오기
>>> from restaurant.models import MyTopping, MyPizza
#전체 토핑
>>> MyTopping.objects.all()
<QuerySet [<MyTopping: 치즈>, <MyTopping: 페퍼로니>, <MyTopping: 올리브>, <MyTopping: 치킨>, <MyTopping: 피망>]>
#각 토핑별로 출력
>>> MyTopping.objects.get(topping_name='치즈')
<MyTopping: 치즈>
>>> MyTopping.objects.get(topping_name='페퍼로니')
<MyTopping: 페퍼로니>
>>> MyTopping.objects.get(topping_name='올리브')
<MyTopping: 올리브>
>>> MyTopping.objects.get(topping_name='치킨')
<MyTopping: 치킨>
>>> MyTopping.objects.get(topping_name='피망')
<MyTopping: 피망>
# 각 토핑이 들어있는 피자를 불러오기
>>> MyTopping.objects.get(topping_name='치즈').mypizza_set.all()
<QuerySet [<MyPizza: 도미노>, <MyPizza: 피자헛>, <MyPizza: 파파존스>]>
>>> MyTopping.objects.get(topping_name='페퍼로니').mypizza_set.all()
<QuerySet [<MyPizza: 피자헛>, <MyPizza: 파파존스>]>
>>> MyTopping.objects.get(topping_name='올리브').mypizza_set.all()
<QuerySet [<MyPizza: 피자헛>]>
>>> MyTopping.objects.get(topping_name='치킨').mypizza_set.all()
<QuerySet [<MyPizza: 도미노>]>
>>> MyTopping.objects.get(topping_name='피망').mypizza_set.all()
<QuerySet [<MyPizza: 파파존스>]>
⭐ Mnay-To-Many 모델은 '서로의 테이블에서' 서로의 테이블을 불러 올 수 있는 것이 특징
1) UserModel에 Follower 추가하기
# user/models.py
from django.db import models
from django.contrib.auth.models import AbstractUser
from django.conf import settings
# Create your models here.
class UserModel(AbstractUser):
class Meta:
db_table = "my_user"
bio = models.TextField(max_length=500, blank=True)
follow = models.ManyToManyField(settings.AUTH_USER_MODEL,related_name='followee')
2) UserModel migrate하기
3) user앱의 views 파일 추가
# user/views.py
@login_required
def user_view(request):
if request.method == 'GET':
# 사용자를 불러오기, exclude와 request.user.username 를 사용해서 '로그인 한 사용자'를 제외하기
user_list = UserModel.objects.all().exclude(username=request.user.username)
return render(request, 'user/user_list.html', {'user_list': user_list})
@login_required
def user_follow(request, id):
me = request.user
click_user = UserModel.objects.get(id=id)
if me in click_user.followee.all():
click_user.followee.remove(request.user)
else:
click_user.followee.add(request.user)
return redirect('/user')
request.user.username
으로 exclude 기능을 사용
해서 로그인 한 사용자를 제외 한 유저를 불러온다user.follow.all()는 해당 사용자가 팔로우 하는 사람들을 불러온다
user.followee.all()는 해당 사용자를 팔로우 하는 사람들을 불러온다
user_follow 함수가 완료 된 후에는 http://127.0.0.1:8000/user url로 redirect시켜준다
4) user앱의 urls.py
# user/urls.py
from django.urls import path
from . import views
urlpatterns = [
path('sign-up/', views.sign_up_view, name='sign-up'),
path('sign-in/', views.sign_in_view, name='sign-in'),
path('logout/', views.logout, name='logout'),
path('user/', views.user_view, name='user-list'), # <- 여기에 컴마 주의!
path('user/follow/<int:id>/', views.user_follow, name='user-follow')
]
5) templates 폴더 내의 user폴더에 'user_list.html' 생성
template 문법
{% for %}
로 반복해서 출력 {{ user }}
으로 출력. 위에서 {{ ul }}
로 출력 해 주는 사용자는, views.py의 user_view함수에서 전달 받은 사용자
views.py
에서 생성한 user_follow
함수와 이어져 있다6) 상단 네비게이션의 '친구'에 사용자 목록 보여주는 URL 넣기
templates 폴더의 base.html을 열고, 아래의 '친구' 부분의 <a> 태그
의 href 속성에 url 넣기
<a class="nav-link" href="/user"> 친구 <span.....
1)python -m venv venv
2)source venv/bin/activate
3)가상환경 파이썬 인터프리터 확인
4)pip list
5)gitignore - 미디어 밑에 venv 추가
6)깃허브에서 레포지터리 생성
7)git init
8)git remote add origin 주소
9)git add .
10)git commit -m ‘init project’
11)git push origin master
12)pip freeze > requirements.txt
13)git add . /git commit -m “requirements.txt” / git push origin master
14)pip insatll django/ django-admin startproject (프로젝트명) .
15)git add. /git commit / git push origin master /
16)python manage,py startapp (app이름)
17)python manage.py rumserver