📢 공지사항
home

Mixin 소개 및 Commentapp 구현

복습
수강일
수강일_
숫자
37
주차
2주차
체크
태그
Commentapp Implementation

Mixin

: create view에는 폼이 있고, detail에는 object가 있다. detail뷰를 form과 같이 사용하고 싶을 때 사용한다.
FormMixin을 사용하면, form_class를 지정해줌으로써 detail view내에서도 form을 사용할 수 있다.

Commentapp

1.
Create View / Delete View
2.
Success_url to ralated article
3.
Model <article, writer, content, created_at>
앱 생성, 세팅 앱연결, url 라우팅

Models 작성

class Comment(models.Model): article = models.ForeignKey(Article, on_delete=models.SET_NULL, null=Ture, related_name='comment') writer = models.ForeignKey(User, on_delete=models.SET_NULL, null=Ture, related_name='comment') content = models.TextField(null=False) created_at = models.DateTimeField(auto_now=True)
Python
복사

forms 작성

class CommentCreationForm(ModelForm): class Meta: modle = Comment fields = ['content']
Python
복사
작성 완료 후, 마이그레이트를 해준다.

View작성

class CommentCreateView(CreateView): model = Comment form_class = CommentCreationForm template_name = 'commentapp/create.html' def get_success_url(self): #여기서 self.object는 comment이다. return reverse('articleapp:datail', kwargs={'pk':self.object.article.pk})
Python
복사
commetapp/templates/commentapp dir 만든 후, 내부에

create.html 만들기

<!-- base.html은 datail에서 가져오므로 지워준다. --> {% load bootstrap4 %} {% block content %} <div style = "text-align: center; max-width: 600px; margin: 4rem auto"> <div class="mb-4"> <h4>Comment Create</h4> </div> <form action="{% url 'commentapp:create' %}" method="post"> {% csrf_token %} {% bootstrap_form form %} <input type="submit" class="btn btn-dark rounded-pill col-6 mt-3"> <!-- 추후 article의 pk값을 받기 위해 미리 작성해둠 --> <input type="hidden" name="article_pk" value="{{ article.pk }}"> </form> </div> {% endblock %}
HTML
복사

ArticleDatail 에 CommentCreate 연결해주기

{% include 'articleapp/create.html' with article=target_article %} <!-- commentapp/create.html에 히든 인풋의 value에 article.pk 값을 넣어준다 --> ...value="{{ article.pk }}">
HTML
복사

FormMixin

articleapp의 ArticleDatilView에 Form을 넣어준다.
class ArticleDatailView(DetailView, FormMixin): ... form_class = CommentCrationForm
Python
복사
CommentCreateView에 form_valid 넣기
def form_valid(self, form) temp_comment = form.save(commit=False) temp_comment.article = Article.get(pk=self.request.POST['article.pk']) temp_comment.writer = self.request.user temp_commnet.save() return super().form_valid(form)
Python
복사
comment create.html에 보안을 추가한다.
{% if user.is_authenticated %} ... {% else %} <a href="{% url 'accountapp:login' %}?next={{ request.path }}" class="btn btn-primary rounded-pill col-6 mt-3"> login </a> {% endif}
Python
복사