보드 앱은 안만들었습니다. 그냥 포스트 작성할 때
섬머노트를 적용하려고 하는데요.
Specifying both 'fields' and 'form_class' is not permitted.
에러가 발생합니다.
blog / form.py
from django import forms
from .models import Post
from django_summernote.widgets import SummernoteWidget
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = ['title', 'content']
widgets = {
'content': SummernoteWidget()
}
blog / models.py
class Post(models.Model):
title = models.CharField(max_length=50)
content = models.TextField()
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
author = models.ForeignKey(User, null=True, on_delete=models.SET_NULL)
category = models.ForeignKey(Category, null=True, blank=True, on_delete=models.SET_NULL)
tags = models.ManyToManyField(Tag, blank=True)
def __str__(self):
return f'{self.pk} / {self.title} :: {self.author}'
def get_absolute_url(self):
return f'/study/{self.pk}/'
blog / views.py
class PostCreate(LoginRequiredMixin, UserPassesTestMixin, CreateView):
model = Post
fields = ['title', 'content', 'category']
form_class = PostForm
def get_context_data(self, **kwargs):
context = super(PostCreate, self).get_context_data()
context['categories'] = Category.objects.all()
context['no_category_post_count'] = Post.objects.filter(category=None).count()
return context
# UserPassesTestMixin를 만족시키기 위한 함수
def test_func(self):
return self.request.user.is_authenticated 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)
# 1. PostCreate라는 클래스가 Submit 버튼을 통해서 POST 형태로 전송될 때 get을 해서 특정 값을 가져온다.
# 그리고 그것을 tags_str에 담는다.
# 2. get('tags_str')이 html 파일에서 태그를 입력한 input 태그의 name과 같은 값이어야 한다.
# 3. 입력된 tag 값을 포매팅 후 리스트에 담는다.
# 4. 반복문을 통해서 태그를 구분하고 태그를 기존 태그와 아닌 것으로 구분 후 아니라면 새로 생성한다.
# 5. 새로 생성한 태그는 slug를 직접 입력 후 저장한다.
# 6. 생성된 객체에 태그를 추가한다.
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.add(tag)
return response
else:
return redirect('/study/')
코드 내용은 이렇습니다..
오늘 부트스트랩 안쓰고 UiKIT 써서 한다고 하다가 crispy 적용시킬 때 안되가지고 구글링 미친듯이 하면서 forms 사용법 배우다가 결국 못했는데 포기하고 부트스트랩 적용시키고 나서 이번엔 섬머노트 적용시키려고 하니까 이번에도 form이 절 괴롭히네요...12시간 코딩해서 막히는 구간 뚫었을 때는 정말 기쁜데 이렇게 또 막히고 답을 모르니 막막하네요...ㅠ
답변 좀 주시면 감사하겠습니다..
forms.py 에서 fields를 field로 적으면 오류가 납니다.
django.core.exceptions.ImproperlyConfigured: Creating a ModelForm without either the 'fields' attribute or the 'exclude' attribute is prohibited; form PostForm needs updating.
강의에서 그렇게 하셨어요