🍎ジャンプ2章コードの整理
config/url.py
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のものがつながっています.
pybo/models.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)
:主語の最大文字数は200個content = models.TextField()
:内容は文字数に制限されませんcreate_date = models.DateTimeField()
:create dateは日付時間情報を格納します. def __str__(self): return self.subject
:召喚クラス時に召喚クラスの本体ForeignKeyは1:N関係を表す.たとえば、投稿やコメントを考慮できます.1つの文章にはそれに対応するコメントが複数あるので、ForeignKeyに満足しています.
djangoでの使用例
class Post(models.Model):
#생략
class Comment(models.Model):
post = models.ForeignKey(Post, on_delete=models.CASCADE)
関係を宣言するには、1:NからNまでの2つのパラメータが必要です.1つはターゲットクラスで、もう1つは削除時のホットスポットの設定です.on_delete
設定各説明は、一方のデータを削除した場合、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-関係を表す-モデル-フィールド-F oreignKeyOneOneFieldManyToManyField
question = models.ForeignKey(Question, on_delete=models.CASCADE
:問題は問題と関係がある.Questionがクリアされると、問題もクリアされます.pybo/urls.py
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'),
]
pybo/views.py
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://s1.md5.ltd/image/5b2806eb276119a1c6584eb94eceb6e4.png)
ソース:https://docs.djangoproject.com/ko/3.1/intro/tutorial03/
Reference
この問題について(🍎ジャンプ2章コードの整理), 我々は、より多くの情報をここで見つけました https://velog.io/@sdk1926/점프-투-장고-2장-코드-정리テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol