from typing import List from django.shortcuts import get_object_or_404 from ninja import Router from ninja.pagination import paginate, PageNumberPagination from article.models import Article from article.schema import ArticleUpdate, ArticleCreate, ArticleListOut, ArticleDetailOut # Create your views here. # Create your views here. router = Router(tags=['Article']) @router.get("/article/", response=List[ArticleListOut], description="获取文章列表") @paginate(PageNumberPagination, page_size=20) def list_articles(request, title: str = '', section_id: int = 0): qs = (Article.objects.filter(title__contains=title).prefetch_related('attachments') .select_related('author', 'section').order_by("-id")) if section_id > 0: return qs.filter(section_id=section_id) return qs @router.get("/article/{id}", response=ArticleDetailOut) def get_article(request, id: int): return get_object_or_404(Article.objects.prefetch_related("attachments"), id=id) @router.post("/article/", response=ArticleDetailOut) def create_article(request, data: ArticleCreate): article = Article.objects.create(**data.dict()) return article @router.put("/article/{id}", response=ArticleDetailOut) def update_article(request, id: int, data: ArticleUpdate): article = get_object_or_404(Article, id=id) for attr, value in data.dict().items(): setattr(article, attr, value) article.save() return article @router.delete("/article/{id}") def delete_article(request, id: int): article = get_object_or_404(Article, id=id) article.delete() return {"success": True}