일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 트랜잭션
- 장고초기세팅
- 호이스팅
- 프로미스
- bcrypt
- javascript
- OSI7계층
- manytomanyfield
- 실행 컨텍스트
- node
- django westagram
- 자바스크립트
- on_delete
- status code
- Django
- nodeJS
- JWT
- westagram
- docker
- wecode
- async/await
- TypeError: this.boardRepository.createBoard is not a function
- 스코프
- CORS
- crud2
- 노드
- rebase
- pm2
- Jest
- typescript
- Today
- Total
될때까지
Django issue : form_valid? form_invalid? 본문
유튜버 Dennis Ivy의 To Do List 만드는 영상을 참고로, Django 스터디에 들어갔다.
참고영상 : https://www.youtube.com/watch?v=llbtoQTt4qw&t=1973s
영어 강의라서 코드만 보며 열심히 타이핑하면서 따라가고 있었는데
띠로리 영상의 결과값과 내 결과가 다르게 나타나는 것이 아닌가😭
초보자가 혼자 공부할때는 이게 제일 스트레스.. 😫
직면한 문제는 아래와 같다.
기존의 상태에서는, 내가 작성한 투두리스트가 다른 사람 아이디로 로그인해도 화면에 보여지고 있었다. 내가 작성한 투두리스트들만 보이게끔 코드를 수정하는 부분을 따라하고 있었는데 뚜둥 똑같이 따라쳤는데 새로 생성한 태스크들이 안보인다. 왜일까 뭐가 문제일까..?
여기까지 작성했던 코드는 아래와 같았다.
from django.shortcuts import render
from django.views.generic.list import ListView
from django.views.generic.detail import DetailView
from django.views.generic.edit import CreateView, UpdateView, DeleteView
from django.urls import reverse_lazy
from .models import Task
from django.contrib.auth.views import LoginView
from django.contrib.auth.mixins import LoginRequiredMixin
class CustomLoginView(LoginView):
template_name = 'base/login.html'
fields = '__all__'
redirect_authenticated_user = True
def get_success_url(self):
return reverse_lazy('tasks')
class TaskList(LoginRequiredMixin, ListView):
model = Task
context_object_name = 'tasks'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['tasks'] =context['tasks'].filter(user=self.request.user)
context['count'] =context['tasks'].filter(complete=False).count()
return context
class TaskDetail(LoginRequiredMixin, DetailView):
model = Task
context_object_name = 'task'
template_name = 'base/task.html'
class TaskCreate(LoginRequiredMixin, CreateView):
model = Task
fields = ['title', 'description', 'complete']
success_url = reverse_lazy('tasks')
def form_invalid(self, form):
form.instance.user = self.request.user
return super(TaskCreate, self).form_valid(form)
class TaskUpdate(LoginRequiredMixin, UpdateView):
model = Task
fields = ['title', 'description', 'complete']
success_url = reverse_lazy('tasks')
class DeleteView(LoginRequiredMixin, DeleteView):
model = Task
context_object_name = 'task'
success_url = reverse_lazy('tasks')
한참을 고생했다.
유튜브를 계속 돌려보면서 틀림그림찾기도 하고,
stackoverflow도 찾아보고
구글링도 해봤지만 안나와 ㅠㅠ
'django can't show', ''django admin show but', 'django why can't see update', ...
왜 안나오는 지 모르니까 저렇게 밖에 칠 수 없었던 나의 짧은 영어😢
1시간 넘게 헤매다가 일단 따라해보자 진도를 나갔다. 그렇데 2시간이 흐른 뒤 찾아낸....
원인.
나와 같은 초보자들은 다들 그런 경험이 한 두 번씩 있겠지?
설마 이거 때문에...? 했는데 거의 99.9% '그거' 때문에 생긴 문제인 적😱
class TaskCreate(LoginRequiredMixin, CreateView):
model = Task
fields = ['title', 'description', 'complete']
success_url = reverse_lazy('tasks')
# def form_invalid(self, form):
def form_valid(self, form):
form.instance.user = self.request.user
return super(TaskCreate, self).form_valid(form)
아직 Django를 뜯어보면서 공부하지 않아서 저 코드가 무슨 뜻인지 정확히는 모르지만,
마지막 줄에 보면, return 생성한 함수(form_invalid)를 다시 호출해야하는데 호출이 못이루어져서 생긴 문제 아닐까 싶었다. 불길한 느낌이 싸악 들었고 그런 느낌은 항상 맞지 신기하다니까😱
혹시나 하고 form_invalid함수명을 form_valid로 수정했더니 제대로 나타나는 나의 투두 리스드들...
감격의 순간 ㅜㅜ 흑흑 찾아냈어 드디어!
그렇다면 만약에, return할 때 생성한 함수명 그대로, super().form_invalid로 했다면 나타날까?
처음 코딩배울때 가장 많이 하는 실수는 매번 똑같은 것 같다.
똑같이 따라 쳤는데 왜 나는 안되지? 하고 찾아보면 눈이 삐꾸인가 꼭! 있는 오타😁
그래도 실수한 부분을 찾아내서 다행이다 속이 다 시원해라!
따라 만들고 있는 투두리스트를 끝내고 나면, 두세번씩 반복하면서 form_valid가 뭔 지 추가로 정리해놔야지
코딩은 따라해보면서 배우는 거니까,
오늘의 실수도 언젠가는 도움이 될꺼야
파이팅!
'학습 > 살이되고 뼈가되어라' 카테고리의 다른 글
.gitignore에 나중에 추가한 파일이 추적될 때 (0) | 2022.07.21 |
---|---|
Python 왓더@property? (0) | 2022.04.29 |
Django render, redirect 차이점이 뭐야? (0) | 2022.04.27 |
Django settings.py : CART_ID = 'cart_item' ..? 왜만들지? (0) | 2022.04.27 |
Study :: '깔끔한 파이썬 탄탄한 백엔드' (0) | 2022.04.25 |