반응형
CodingEntrepreneurs Django 강의 정리
get_queryset>
1. 항목 목록 가져오기
2. 쿼리셋 특정 동작을 활성화
models>
from django.conf import settings
from django.db import models
from django.utils import timezone
# Create your models here.
User = settings.AUTH_USER_MODEL
class BlogPostQuerySet(models.QuerySet):
def published(self):
now = timezone.now()
return self.filter(publish_date__lte=now)
class BlogPostManager(models.Manager):
def get_queryset(self):
return BlogPostQuerySet(self.model, using=self._db)
def published(self):
return self.get_queryset().published()
class BlogPost(models.Model): # blogpost_set -> queryset
# id = models.IntegerField() # pk
user = models.ForeignKey(User, default=1, null=True, on_delete=models.SET_NULL)
title = models.CharField(max_length=120)
slug = models.SlugField(unique=True) # hello world -> hello-world
content = models.TextField(null=True, blank=True)
publish_date = models.DateTimeField(
auto_now=False, auto_now_add=False, null=True, blank=True
)
timestamp = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
objects = BlogPostManager()
class Meta:
ordering = ["-publish_date", "-updated", "-timestamp"]
def get_absolute_url(self):
return f"/blog/{self.slug}"
def get_edit_url(self):
return f"{self.get_absolute_url()}/edit"
def get_delete_url(self):
return f"{self.get_absolute_url()}/delete"
views>
from django.contrib.auth.decorators import login_required
from django.contrib.admin.views.decorators import staff_member_required
from django.http import Http404
from django.shortcuts import render, get_object_or_404, redirect
# Create your views here.
from .forms import BlogPostModelForm
from .models import BlogPost
# CRUD
# GET -> Retrieve / List
# POST -> Create / Update / DELETE
# Create Retrieve Update Delete
def blog_post_list_view(request):
# list out objects
# could be search
# qs = BlogPost.objects.all().published() # queryset -> list of python object
qs = BlogPost.objects.all() # queryset -> list of python object
template_name = "blog/list.html"
context = {"object_list": qs}
return render(request, template_name, context)
# @login_required
@staff_member_required
def blog_post_create_view(request):
# create objects
# ? use a form
# request.user -> return something
form = BlogPostModelForm(request.POST or None)
if form.is_valid():
obj = form.save(commit=False)
obj.user = request.user
obj.save()
form = BlogPostModelForm()
template_name = "form.html"
context = {"form": form}
return render(request, template_name, context)
def blog_post_detail_view(request, slug):
# 1 object -> detail view
obj = get_object_or_404(BlogPost, slug=slug)
template_name = "blog/detail.html"
context = {"object": obj}
return render(request, template_name, context)
@staff_member_required
def blog_post_update_view(request, slug):
obj = get_object_or_404(BlogPost, slug=slug)
form = BlogPostModelForm(request.POST or None, instance=obj)
if form.is_valid():
form.save()
template_name = "form.html"
context = {"title": f"Update {obj.title}", "form": form}
return render(request, template_name, context)
@staff_member_required
def blog_post_delete_view(request, slug):
obj = get_object_or_404(BlogPost, slug=slug)
template_name = "blog/delete.html"
if request.method == "POST":
obj.delete()
return redirect("/blog")
context = {"object": obj}
return render(request, template_name, context)
반응형
'Python_WEB > Try_Django' 카테고리의 다른 글
[Django]Static Files and Uploading Files (0) | 2020.06.21 |
---|---|
[Django]Published and Draft Posts (0) | 2020.06.21 |
[Django]Publish Date, Timestamp & Updated (0) | 2020.06.21 |
[Django]Include with Arguments (0) | 2020.06.21 |
[Django]Include the Navbar (0) | 2020.06.21 |