WEB/Django prac
[Django prac][DB N:1 ②] 5. 작성자 넣기
bay07
2024. 4. 4. 17:50
# articles.forms.py
ArticleForm 출력 필드 수정
출력에서 User을 선택하는 항목을 제외한다.
더보기
from django import forms
from .models import Article, Comment
class ArticleForm(forms.ModelForm):
class Meta:
model = Article
# fields = ('title', 'content',)
exclude = ('user',)
class CommentForm(forms.ModelForm):
class Meta:
model = Comment
fields = ('content',)
# articles > views.py
게시글 작성 시 작성자 정보가 함께 저장될 수 있도록
save의 commit 옵션 활용하기
article = form.save(commit=False)
comment = comment_form.save(commit=False)
더보기
from django.shortcuts import render, redirect
from django.contrib.auth.decorators import login_required
from .models import Article, Comment
from .forms import ArticleForm, CommentForm
def index(request):
articles = Article.objects.all()
context = {
'articles': articles,
}
return render(request, 'articles/index.html', context)
def detail(request, pk):
article = Article.objects.get(pk=pk)
comments = article.comment_set.all()
comment_form = CommentForm()
context = {
'article': article,
'comments': comments,
'comment_form': comment_form,
}
return render(request, 'articles/detail.html', context)
@login_required
def create(request):
if request.method == 'POST':
form = ArticleForm(request.POST)
if form.is_valid():
article = form.save(commit=False)
article.user = request.user
article.save()
return redirect('articles:detail', article.pk)
else:
form = ArticleForm()
context = {
'form': form,
}
return render(request, 'articles/create.html', context)
@login_required
def delete(request, pk):
article = Article.objects.get(pk=pk)
article.delete()
return redirect('articles:index')
@login_required
def update(request, pk):
article = Article.objects.get(pk=pk)
if request.method == 'POST':
form = ArticleForm(request.POST, instance=article)
if form.is_valid():
form.save()
return redirect('articles:detail', article.pk)
else:
form = ArticleForm(instance=article)
context = {
'form': form,
'article': article,
}
return render(request, 'articles/update.html', context)
def comments_create(request, pk):
article = Article.objects.get(pk=pk)
comments = article.comment_set.all()
comment_form = CommentForm(request.POST)
if comment_form.is_valid():
comment = comment_form.save(commit=False)
comment.article = article
comment.user = request.user
comment.save()
return redirect('articles:detail', article.pk)
context = {
'comment_form': comment_form,
'article': article,
'comments': comments,
}
return render(request, 'articles/detail.html', context)
def comments_delete(request, article_pk, comment_pk):
comment = Comment.objects.get(pk=comment_pk)
comment.delete()
return redirect('articles:detail', article_pk)
# 서버 열어서 확인해보기
사용자가 글을 쓰면, 그 사람 이름으로 써지도록
save all
python manage.py runserver
아까 작성자 선택하는 란이 사라졌다
자동으로 로그인한 사용자가 작성자가 되었음
db에서 테이블 확인하기