Django ViewClass 2-5) ListView

Turtleยท2023๋…„ 12์›” 18์ผ
0
post-thumbnail

๐Ÿ“ŒListView

  • ํŠน์ • ๋ชจ๋ธ์„ ๋ฐ”๋กœ ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ViewClass
  • template_name์œผ๋กœ ํ…œํ”Œ๋ฆฟ ์ง€์ • ๊ฐ€๋Šฅ

List ๋ทฐ ํด๋ž˜์Šค์˜ ๊ธฐ๋ณธ ํ˜•ํƒœ

class ListView:
	model: Model
    template_name: str
    queryset: Queryset

๐Ÿ“Œ์ ์šฉ

from django.http import HttpRequest, HttpResponse
from django.shortcuts import render, HttpResponseRedirect, redirect
from django.views.generic import TemplateView, CreateView, UpdateView, DeleteView, ListView, DetailView, FormView
from .models import Task, ChecklistItem
from django.utils import timezone
from django.core.paginator import Paginator
from django.urls import reverse_lazy

class TaskPreviousView(ListView):
    model = Task
    template_name = "pages/task_previous_list.html"
    queryset = Task.objects.filter(due__lt=timezone.now())
<div class="row row-cols-1 row-cols-md-2 row-cols-lg-4 g-4 mt-2">
    {% for item in object_list %}
    <div class="col">
        <div class="card text-white bg-secondary mb-3">
            <div class="card-header">{{item.type}}</div>
            <div class="card-body">
                <h5 class="card-title">{{item.title}}</h5>
                <p class="card-text">
                    <span class="badge bg-light text-dark">
                        {{item.due|date:"Y๋…„ m์›” d์ผ H์‹œ i๋ถ„"}}๊นŒ์ง€
                    </span>
                </p>
            </div>
        </div>
    </div>
    {% endfor %}
</div>
  • queryset ๋ณ€์ˆ˜์— Task.objects.filter(due__lt=timezone.now()) ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑ
  • queryset ์ธ์Šคํ„ด์Šค๊ฐ€ ์ƒ์„ฑ๋œ ๊ฒƒ์ผ๋ฟ ์‹ค์ œ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํžˆํŠธ์น˜์ง€ ์•Š๋Š”๋‹ค.
  • ํžˆํŠธ์น˜๋Š” ์‹œ์ ์€ ํ…œํ”Œ๋ฆฟ์—์„œ for๋ฌธ(์ดํ„ฐ๋ ˆ์ด์…˜)์œผ๋กœ ์ˆœํšŒ๋ฅผ ํ•  ๋•Œ ํžˆํŠธ๊ฐ€ ๋œ๋‹ค.

๐Ÿ“ŒQuerySet

  • Django ORM์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ ์ •์˜
  • ์ฟผ๋ฆฌ์…‹ ๋‹จ๊ณ„์—์„œ๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์งˆ์˜ํ•˜์ง„ ์•Š์Œ

๐Ÿ“ŒQuerySet์˜ Evaluate ์‹œ์ (๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํžˆํŠธ) โ˜…

  • ์ดํ„ฐ๋ ˆ์ด์…˜(์ˆœํ™˜)
  • ์Šฌ๋ผ์ด์‹ฑ
  • ํ”ฝํด๋ง(pickling), ์บ์‹ฑ(caching)
  • len() ํ˜ธ์ถœ
  • list(), bool()๋กœ ๋ณ€ํ™˜
  • ํŒŒ์ด์ฌ ์ธํ„ฐํ”„๋ฆฌํ„ฐ์—์„œ ์ถœ๋ ฅํ•  ๋•Œ

๐Ÿ“ŒFieldLookup

๐Ÿ“ŒQuerySet API

  • Django๊ฐ€ ์ œ๊ณตํ•˜๋Š” ORM์„ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•
  • Model์„ ์ •์˜ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค๊ณ , ์ฝ๊ณ , ์ˆ˜์ •ํ•˜๊ณ , ์ง€์šธ ์ˆ˜ ์žˆ๋Š” API ์ œ๊ณต
  • QuerySet๊ณผ ์ƒํ˜ธ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋„๊ตฌ

๐Ÿ“ŒDatabase API ๊ตฌ๋ฌธ

-- objects (Manager)

  • Django ๋ชจ๋ธ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ ์ž‘์—…์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค
  • Django๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  Django ๋ชจ๋ธ ํด๋ž˜์Šค์— ๋Œ€ํ•ด object๋ผ๋Š” Manager ๊ฐ์ฒด๋ฅผ ์ž๋™์œผ๋กœ ์ถ”๊ฐ€ํ•จ
  • ์ด Manager๋ฅผ ํ†ตํ•ด ํŠน์ • ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์Œ
  • DB๋ฅผ Python Class๋กœ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ฌ๋Ÿฌ ๋ฉ”์„œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” manager

-- Query

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ํŠน์ •ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์—ฌ ๋‹ฌ๋ผ๋Š” ์š”์ฒญ
  • ์ฟผ๋ฆฌ๋ฌธ์„ ์ž‘์„ฑํ•œ๋‹ค. โ†’ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์š”์ฒญ์„ ๋ณด๋‚ผ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.
  • ์ด ๋•Œ, ํŒŒ์ด์ฌ์œผ๋กœ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๊ฐ€ ORM์— ์˜ํ•ด SQL๋กœ ๋ณ€ํ™˜๋˜์–ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ „๋‹ฌ๋˜๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์‘๋‹ต ๋ฐ์ดํ„ฐ๋ฅผ ORM์ด QuerySet์ด๋ผ๋Š” ์ž๋ฃŒ ํ˜•ํƒœ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์šฐ๋ฆฌ์—๊ฒŒ ์ „๋‹ฌ๋จ, ํŒŒ์ด์ฌ์˜ ์ž๋ฃŒ๊ตฌ์กฐ์ฒ˜๋Ÿผ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์คŒ

-- QuerySet

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๊ฒŒ์„œ ์ „๋‹ฌ ๋ฐ›์€ ๊ฐ์ฒด ๋ชฉ๋ก(๋ฐ์ดํ„ฐ ๋ชจ์Œ)
  • ์ˆœํšŒ๊ฐ€ ๊ฐ€๋Šฅ(Iterator)ํ•œ ๋ฐ์ดํ„ฐ๋กœ์จ 1๊ฐœ ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์™€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
  • Django ORM์„ ํ†ตํ•ด ๋งŒ๋“ค์–ด์ง„ ์ž๋ฃŒํ˜•์ด๋ฉฐ, ํ•„ํ„ฐ(filter)๋ฅผ ๊ฑธ๊ฑฐ๋‚˜ ์ •๋ ฌ(order_by) ๋“ฑ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Œ
  • objects manager๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ณต์ˆ˜์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” QuerySet Method๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐ˜ํ™˜๋˜๋Š” ๊ฐ์ฒด
  • ๋‹จ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๋‹จ์ผํ•œ ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•  ๋•Œ๋Š” QuerySet์ด ์•„๋‹Œ ๋ชจ๋ธ(Class)์˜ ์ธ์Šคํ„ด์Šค๋กœ ๋ฐ˜ํ™˜๋จ

๐Ÿ“ŒCreate

In[1] : from taskapp.models import Task

In[2] : from django.utils import timezone

In[3] : due_time = timezone.now() + timezone.timedelta(days=3)

In[4] : new_task = Task.objects.create(title="์šด์ „๋ฉดํ—ˆ", type=Task.TaskType.SOCIAL, due=due_time)

In[5] : new_task.save()

๐Ÿ“ŒRead

  • QuerySet API Method๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์–‘ํ•˜๊ฒŒ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.

  • QuerySet API Method๋Š” ํฌ๊ฒŒ ์ƒˆ๋กœ์šด Querysets๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒƒ๊ณผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ 2๊ฐ€์ง€๋กœ ๋ถ„๋ฅ˜

โ‘ . all()

  • QuerySet return

  • ์ „์ฒด ๋ฐ์ดํ„ฐ ์กฐํšŒ

โ‘ก. get()

  • ๋‹จ์ผ ๋ฐ์ดํ„ฐ ์กฐํšŒ

  • ๊ฐ์ฒด๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋‹ค๋ฉด DoesnotExist ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ๋‘˜ ์ด์ƒ์˜ ๊ฐ์ฒด๋ฅผ ์ฐพ์œผ๋ฉด MultipleObjectsReturned ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ด

  • ์œ„์™€ ๊ฐ™์€ ํŠน์ง•์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Primary Key์™€ ๊ฐ™์ด ๊ณ ์œ ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ์กฐํšŒ์—์„œ๋งŒ ์‚ฌ์šฉ

โ‘ข. filter()

  • ์ง€์ •๋œ ์กฐํšŒ ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ผ์น˜ํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ํฌํ•จํ•˜๋Š” ์ƒˆ QuerySet์„ ๋ฐ˜ํ™˜

  • ์กฐํšŒ๋œ ๊ฐ์ฒด๊ฐ€ ์—†๊ฑฐ๋‚˜ 1๊ฐœ์—ฌ๋„ QuerySet์„ ๋ฐ˜ํ™˜

โ‘ฃ. FieldLookup

  • FieldLookup์€ SQL WHERE์ ˆ์˜ ํ•ต์‹ฌ์„ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์ด๋Š” filter(), exclude(), get() ๋“ฑ์˜ QuerySet ๋ฉ”์†Œ๋“œ๋กœ ์–ป์„ ์ˆ˜ ์žˆ๋Š” QuerySet์„ ์กฐ๊ฑด์— ๋งž๊ฒŒ ์ œํ•œ
ํ‘œํ˜„์˜๋ฏธ
__exact์ •ํ™•ํžˆ ์ผ์น˜ โ†’ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„
__iexact์ •ํ™•ํžˆ ์ผ์น˜ โ†’ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€์•Š์Œ
__containsํฌํ•จํ•˜๋Š”์ง€ โ†’ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„
__icontainsํฌํ•จํ•˜๋Š”์ง€ โ†’ ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€์•Š์Œ
__gtํผ โ†’ greater than
__gteํฌ๊ฑฐ๋‚˜ ๊ฐ™์Œ โ†’ greater than or equal to
__lt์ž‘์Œ โ†’ less than
__lte์ž‘๊ฑฐ๋‚˜ ๊ฐ™์Œ โ†’ less than or equal to
__startwith์‹œ์ž‘ํ•˜๋Š”์ง€
__endwith๋๋‚˜๋Š”์ง€

์ฐธ๊ณ ์ž๋ฃŒ - Django FieldLookup

๐Ÿ“ŒUpdate

  • ์ˆ˜์ •ํ•˜๊ณ ์ž ํ•˜๋Š” ์ธ์Šคํ„ด์Šค ๊ฐ์ฒด๋ฅผ get()์„ ์ด์šฉํ•ด ์กฐํšŒํ•œ ํ›„ ๋ฐ˜ํ™˜ ๊ฐ’์„ ์ €์žฅ

  • ์ธ์Šคํ„ด์Šค ๊ฐ์ฒด์˜ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜ ๊ฐ’์„ ์ƒˆ๋กœ์šด ๊ฐ’์œผ๋กœ ํ• ๋‹น

  • save() ์ธ์Šคํ„ด์Šค ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœํ•˜์—ฌ ์ €์žฅ

๐Ÿ“ŒDelete

  • ์‚ญ์ œํ•˜๊ณ ์ž ํ•˜๋Š” ์ธ์Šคํ„ด์Šค ๊ฐ์ฒด๋ฅผ get()์„ ์ด์šฉํ•ด ์กฐํšŒํ•œ ํ›„ ๋ฐ˜ํ™˜ ๊ฐ’์„ ์ €์žฅ

  • delete() ์ธ์Šคํ„ด์Šค ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœํ•˜์—ฌ ์‚ญ์ œ

0๊ฐœ์˜ ๋Œ“๊ธ€