# from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from django.views.generic import CreateView
# from django.utils.text import slugify
from .models import Category, Tag, Post
class PostCreate(CreateView):
model = Post
fields = ['title', 'content', 'category']
def test_func(self):
return 검사
def form_valid(self, form):
1-1. form.instance.author 에 로그인 정보 저장
1-2. response = super().form_valid(form)
2. tags_str = self.request.POST.get('tags_str')
return response
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from django.views.generic import CreateView
# from django.utils.text import slugify
from .models import Category, Tag, Post
class PostCreate(LoginRequiredMixin, UserPassesTestMixin, CreateView):
model = Post
fields = ['title', 'content', 'category']
def test_func(self):
return self.request.user.is_superuser or self.request.user.is_staff
form의 request.POST를 받아서 처리하는 form_valid(self, form) 오버라이딩!
1. author는 포린키! form.instance.author : 폼의 author속성에 로그인 정보
2. 원래의 form_valid(form)객체에 (author를 추가한) form 을 담아서,
3. response 에 담아 리턴
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from django.views.generic import CreateView
# from django.utils.text import slugify
from .models import Category, Tag, Post
class PostCreate(LoginRequiredMixin, UserPassesTestMixin, CreateView):
model = Post
fields = ['title', 'content', 'category']
def test_func(self):
return self.request.user.is_superuser or self.request.user.is_staff
def form_valid(self, form):
current_user = self.request.user
if current_user.is_authenticated and (current_user.is_staff or current_user.is_superuser):
form.instance.author = current_user
response = super(PostCreate, self).form_valid(form)
return response
else:
return redirect('/blog/')
폼에서 입력받은 태그 가져오기 : self.request.POST.get('tags_str')
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from django.views.generic import CreateView
from django.utils.text import slugify
from .models import Category, Tag, Post
class PostCreate(LoginRequiredMixin, UserPassesTestMixin, CreateView):
model = Post
fields = ['title', 'hook_text', 'content', 'head_image', 'file_upload', 'category']
def test_func(self):
return self.request.user.is_superuser or self.request.user.is_staff
def form_valid(self, form):
current_user = self.request.user
if current_user.is_authenticated and (current_user.is_staff or current_user.is_superuser):
form.instance.author = current_user
response = super(PostCreate, self).form_valid(form)
tags_str = self.request.POST.get('tags_str')
if tags_str:
tags_str = tags_str.strip()
tags_str = tags_str.replace(',', ';')
tags_list = tags_str.split(';')
for t in tags_list:
t = t.strip()
tag, is_tag_created = Tag.objects.get_or_create(name=t)
if is_tag_created:
tag.slug = slugify(t, allow_unicode=True)
tag.save()
# 새로 만든 포스트(self.object)의 tags 필드에 tag추가
self.object.tags.add(tag)
return response
else:
return redirect('/blog/')
class PostUpdate(LoginRequiredMixin, UpdateView):
model = Post
fields = ['title', 'hook_text', 'content', 'head_image', 'file_upload', 'category']
# 기본은 접미사가 _form 인 것인데, 분리. 왜?
template_name = 'blog/post_update_form.html'
# 폼에 입력된 데이터 중, 태그는 별도로 불러와야 한다.
def get_context_data(self, **kwargs):
def dispatch(self, request, *args, **kwargs):
# 태그 입력 위해
def form_valid(self, form):
response = super(PostUpdate, self).form_valid(form)
# 현재 post(object) 에 입력된 tags는 모두 지우고, 폼에서 새로 받아서 입력.
self.object.tags.clear()
tags_str = self.request.POST.get('tags_str')