from django.contrib import admin
from django.urls import path, include
from pybo import views
urlpatterns = [
path('admin/', admin.site.urls),
path('pybo/', include('pybo.urls')),
]
์ฃผ์์ฐฝ์ ์ฃผ์๋ฅผ์น๊ณ ์ฃผ์์์ admin์ ์น๋ฉด ์๋์ผ๋ก '/'๊ฐ ๋ถ๊ณ admin.site.urls๊ฐ ์คํ๋๋ค.
์ฃผ์์ฐฝ์ ์ฃผ์๋ฅผ์น๊ณ ์ฃผ์์์ pybo๋ฅผ ์น๋ฉด ์๋์ผ๋ก '/'๊ฐ ๋ถ๊ณ
pybo ํด๋์ urls.py์ ์๋๊ฒ๋ค์ด ์ฐ๊ฒฐ ๋๋ค.
from django.db import models
# Create your models here.
class Question(models.Model):
subject = models.CharField(max_length=200)
content = models.TextField()
create_date = models.DateTimeField()
def __str__(self):
return self.subject
class Answer(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
content = models.TextField()
create_date = models.DateTimeField()
๋ชจ๋ธ ํด๋์ค๋ ํ๋๋ฅผ ์ ์ํ๊ธฐ ์ํด ์ธ์คํด์ค ๋ณ์๊ฐ ์๋ ํด๋์ค ๋ณ์๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์ด๋ ๊ทธ ๋ณ์๊ฐ ํ ์ด๋ธ ์ปฌ๋ผ์ ๋ด์ฉ์ ๊ฐ๋ ๊ฒ์ด ์๋๋ผ, ํ ์ด๋ธ์ ์ปฌ๋ผ ๋ฉํ ๋ฐ์ดํ๋ฅผ ์ ์ํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
subject = models.CharField(max_length=200)
:subject์ ์ต๋๊ธ์์๋ 200์
content = models.TextField()
: content๋ ๊ธ์ ์ ์ ํ ์์
create_date = models.DateTimeField()
: create_date์ ๋ ์ง ์๊ฐ ์ ๋ณด๋ฅผ ์ ์ฅ.
def __str__(self): return self.subject
: ํด๋์ค๋ฅผ ์ํํ ๋ ํด๋์ค์ subject๋ฅผ ์ํ
ForeignKey
ForeignKey ๋ 1:N ๊ด๊ณ๋ฅผ ์๋ฏธํฉ๋๋ค. ์๋ฅผ ๋ค์ด ๊ฒ์๊ธ๊ณผ ๋๊ธ์ ์๊ฐํ ์ ์์ต๋๋ค. ํ๋์ ๊ธ์๋ ๊ทธ ๊ธ์ ํด๋นํ๋ ๋๊ธ์ด ์ฌ๋ฌ ๊ฐ ์กด์ฌํ๊ฒ ๋๋ฏ๋ก ForeignKey ๋ฅผ ๋ง์กฑํฉ๋๋ค.
django ์์์ ์ฌ์ฉ ์์class Post(models.Model): #์๋ต class Comment(models.Model): post = models.ForeignKey(Post, on_delete=models.CASCADE)
1:N ์ค์์ N ์ธ ์ชฝ์์ ๊ด๊ณ๋ฅผ ์ ์ธํด์ฃผ๋ฉฐ, ๋ ๊ฐ์ ์ธ์๋ฅผ ํ์๋ก ํฉ๋๋ค. ํ๋๋ ๋์์ด ๋๋ ํด๋์ค, ๋ค๋ฅธ ํ๋๋ ์ญ์ ์ ์ด์์ ๋ํ ์ค์ ์ ๋๋ค.
on_delete
์ค์
๊ฐ๊ฐ์ ๋ํ ์ค๋ช ์ 1์ธ ์ชฝ์ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๋์์ ์, N ์ธ ์ชฝ์ ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ์ง์ ๋ํ ์ค์ ์ ๋๋ค.
CASCADE
: ์ด์ ์ฐ๊ฒฐ๋์ด ์๋ ๋ชจ๋ N ์ชฝ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํฉ๋๋ค.
PROTECT
: 1์ธ ์ชฝ์ ๋ฐ์ดํฐ๊ฐ ์ญ์ ๊ฐ ๋์ง ์๋๋ก ๋ณดํธํด์ค๋๋ค.
SET_NULL
: null ๋ก ๊ฐ์ ๋์ฒดํ๊ฒ ๋์ด ํ๋์ null=True ์ต์ ์ด ์์ด์ผ๋ง ๊ฐ๋ฅํฉ๋๋ค.
SET_DEFAULT
: default ๋ก ๊ฐ์ ๋์ฒดํ๊ฒ ๋์ด ํ๋์ default=True ์ต์ ์ด ์์ด์ผ๋ง ๊ฐ๋ฅํฉ๋๋ค.
SET
: ๋์ฒดํ ๊ฐ์ด๋ ํจ์๋ฅผ ์ง์ ํฉ๋๋ค.
DO_NOTHING
: ์๋ฌด ๊ฒ๋ ํ์ง ์์ง๋ง db ์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
์ถ์ฒ:https://ssungkang.tistory.com/entry/Django-๊ด๊ณ๋ฅผ-ํํํ๋-๋ชจ๋ธ-ํ๋-ForeignKeyOneToOneFieldManyToManyField
question = models.ForeignKey(Question, on_delete=models.CASCADE
: question์ Question๊ณผ ์ฐ๊ด๋์ด์๋ค. ๋ง์ฝ Question์ด ์ง์์ง๋ฉด question๋ ๋ค ์ง์์ง๋ค.
from django.urls import path
from . import views
#app์ด๋ฆ์ pybo
app_name = 'pybo'
urlpatterns = [
# ์ฃผ์/pybo๋ผ๊ณ ์น๋ฉด views์ index ํจ์ ์คํ
path('', views.index, name='index'),
# ์ฃผ์/pybo/question.id ์ ๊ฐ์ intํ์ผ๋ก ๋ฐ๊พผ๊ฒ ์ ์น๋ฉด views์ detailํจ์ ์คํ
path('<int:question_id>/', views.detail,name='detail'),
# ์ฃผ์/pybo/answer/create/<int:question_id/ ๋ฅผ ์น๋ฉด answer_create ํจ์ ์คํ
path('answer/create/<int:question_id>/', views.answer_create, name='answer_create'),
# ์ฃผ์ question/create/๋ฅผ ์น๋ฉด uestion_create ํจ์ ์คํ
path('question/create/', views.question_create, name='question_create'),
]
from django.shortcuts import render, get_object_or_404, redirect
from django.http import HttpResponse
from .models import Question
from django.utils import timezone
from .forms import QuestionForm, AnswerForm
# Create your views here.
def index(request):
"""
pybo ๋ชฉ๋ก ์ถ๋ ฅ
"""
#question_list๋ Question๋ชจ๋ธ์ object๋ฅผ create-date์ญ์์ผ๋ก ์ ๋ ฌ
question_list = Question.objects.order_by('-create_date')
#context๋ dicํํ๋ก ์ ์ฅ
context = {'question_list': question_list}
# ๋ ๋๋ง 'pybo/question_list.html'์ ์ง์ญ๋ณ์ context ์ ๋ฌ
return render(request, 'pybo/question_list.html',context)
def detail(request,question_id):
"""
pybo๋ด์ฉ์ถ๋ ฅ
"""
# ์ธ์ฉ ์ฐธ์กฐ
question = get_object_or_404(Question, pk=question_id)
context = {'question':question}
return render(request,'pybo/question_detail.html',context)
def answer_create(request,question_id):
"""
pybo ๋ต๋ณ๋ฑ๋ก
"""
question = get_object_or_404(Question, pk=question_id)
# ๋ฆฌํ์คํธ ๋ฐ์ form์ ๋ฉ์๋๊ฐ POST๋ผ๋ฉด
if request.method == "POST":
form = AnswerForm(request.POST)
if form.is_valid():
answer = form.save(commit=False)
answer.create_date = timezone.now()
answer.question = question
answer.save()
return redirect('pybo:detail', question_id=question.id)
else:
form = AnswerForm()
context = {'question':question,'form':form}
return render(request, 'pybo/question_detail.html',context)
def question_create(request):
"""
pybo ์ง๋ฌธ๋ฑ๋ก
"""
if request.method == 'POST':
form = QuestionForm(request.POST)
if form.is_valid():
question = form.save(commit=False)
question.create_date = timezone.now()
question.save()
return redirect('pybo:index')
else:
form = QuestionForm()
context = {'form': form}
return render(request, 'pybo/question_form.html', context)
์ถ์ฒ:https://docs.djangoproject.com/ko/3.1/intro/tutorial03/