250x250
반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 공작과개미
- 성선택
- 다산의마지막습관
- linux명령어
- git 업로드
- 일일투자금액
- delete
- Git
- OpenCV
- 헬레나크로닌
- ChatGPT
- 비밀번호변경
- Python
- 지방사람이보는서울사람
- 나만의주식5법칙
- 클라우드
- 훌륭한모국어
- MySQL
- 꼭읽어봐야할책
- 중용
- 서울로가자
- todolist
- Face Detection
- 독후감
- php
- Django
- 옹졸함
- db
- UPSERT
- 네인생우습지않다
Archives
- Today
- Total
Terry Very Good
[Django Todolist 프로젝트 2] 완료한 항목 보이지 않게 하는 법(DB 삭제 없이) 본문
728x90
반응형
아래 Web에서 '완료'버튼 클릭 시, 해당 항목 보이지 않게 하는 법
(1). Model(DB Table)에 isDone(Boolean Field) 컬럼 추가
- models.py
from django.db import models
# Create your models here.
class Todo(models.Model):
content = models.CharField(max_length = 255)
isDone = models.BooleanField(default=False)
하고 난 뒤,
python manage.py makemigrations
python manage.py migrate
(2). 개발 로직:
'완료' 누르면 해당 Data는 isDone이 True가 되고, isDon이 True인 Data는 출력되지 않도록 만든다.
- 1). '완료' 버튼 클릭 시 doneTodo()가 실행되도록 index.html의 form action에 './doneTodo' 입력
- 2). urls.py에 ./doneTodo에 대한 path 입력
- 3). '완료' 버튼 클릭 시, 해당 Data의 isDone은 True가 되도록 Views.py에 doneTodo 함수 생성
- 4). 더불어 index.html이 새로고침되며, isDone이 True인 Data는 출력이 되지 않도록 HTML 내부 if문 구성
(3). 코드
- index.html 내부
<div class="toDoDiv">
<ul class="list-group">
{% for todo in todos %}
{% if todo.isDone == False %}
<form action="./doneTodo/" method="GET">
<div class="input-group" name='todo1'>
<li class="list-group-item">{{todo.content}}</li>
<input type="hidden" id="todoNum" name="todoNum" value="{{todo.id}}"></input>
<span class="input-group-addon">
<button type="submit" class="custom-btn btn btn-danger">완료</button>
</span>
</div>
</form>
{% else %}
{% endif %}
{% endfor %}
</ul>
</div>
- urls.py 내부
from django.urls import path
from . import views
urlpatterns = [
path('',views.index, name='index'),
path('createTodo/', views.createTodo, name='createTodo'),
path('doneTodo/', views.doneTodo, name='doneTodo')
]
- views.py 내부
from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect
from django.urls import reverse
from .models import *
# Create your views here.
def index(request):
todos = Todo.objects.all() # Todo 테이블의 모든 데이터를 가져와서
content = {'todos': todos} # 딕셔너리형태로 content에 넣는다
return render(request, 'my_to_do_app/index.html', content)
def createTodo(request):
user_input_str = request.POST['todoContent'] # name값이 todoContent였지!
new_todo = Todo(content = user_input_str) # DB의 Todo테이블에 쓰고,
new_todo.save() # 저장!
return HttpResponseRedirect(reverse('index'))
#return HttpResponse("create Todo를 할 거야!=>"+user_input_str)
def deleteTodo(request):
done_todo_id = request.GET['todoNum']
print("완료한todo의 id", done_todo_id)
todo = Todo.objects.get(id=done_todo_id)
todo.delete()
return HttpResponseRedirect(reverse('index'))
def doneTodo(request):
done_todo_id = request.GET['todoNum']
print("완료한 todo의 id",done_todo_id)
todo = Todo.objects.get(id = done_todo_id)
todo.isDone = True
todo.save()
return HttpResponseRedirect(reverse('index'))
728x90
반응형