모델용 Django 관리 도구.
모델
Article
이 있다고 가정합니다.# models.py
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=250)
slug = models.SlugField(max_length=250)
author = models.ForeignKey(User,
on_delete=models.CASCADE,
related_name='articles')
body = models.TextField()
published_on = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
이 모델에 대한 관리 사이트에서 다음과 같은 기능을 원합니다.
title
필드의 문자열 표현만 표시하고 싶지 않습니다. 또한 모델 항목에 author
및 published_on
를 나타내려고 합니다. slug
필드를 기준으로 모델의 title
필드를 미리 채우고 싶습니다. 이를 위해 django 🦄의 은혜로 간단한 방법이 있습니다.
시작하겠습니다!
1. 관리 사이트에서 모델의 많은 필드를 나타냅니다.
이렇게 하려면
admin.py
파일로 이동하여 ModelAdmin
모델에 대한 Article
를 만들고 list_display
목록을 설정해야 합니다.# admin.py file
from django.contrib import admin
from .models import Article
class ArticleAdmin(admin.ModelAdmin):
# displaying title, author and publish date.
list_display = ['title', 'author', 'published_on']
admin.site.register(Article, ArticleAdmin)
이제 모델의
author
와 함께 published_on
와 title
를 모두 나타냅니다.2. 필터를 생성하여 모델 항목을 정렬합니다.
이렇게 하려면
ArticleAdmin
를 list_filter
로 업데이트해야 합니다.# admin.py file
from django.contrib import admin
from .models import Article
class ArticleAdmin(admin.ModelAdmin):
# displaying title, author and publish date.
list_display = ['title', 'author', 'published_on']
# creating filter to sort the entries by publish date.
list_filter = ['published_on',]
admin.site.register(Article, ArticleAdmin)
게시 날짜별로 모델 항목을 필터링하는 데 사용할 수 있는 필터가 오른쪽에 발생한 것을 볼 수 있습니다.
작성자별로 기사를 정렬하는 필터를 만들 수도 있지만 사용자 수가 증가하면 필터가 모든 항목보다 길어지기 때문에 좋은 방법은 아닙니다.
3. 검색창 만들기.
검색 표시줄을 만들려면 'ArticleAdmin' 클래스에 'search_fields'를 추가하기만 하면 됩니다.
# admin.py file
from django.contrib import admin
from .models import Article
class ArticleAdmin(admin.ModelAdmin):
# displaying title, author and publish date.
list_display = ['title', 'author', 'published_on']
# creating filter to sort the entries by publish date.
list_filter = ['published_on',]
# creating the search bar.
search_fields = ['title', 'body']
admin.site.register(Article, ArticleAdmin)
search_fields
목록에서 검색할 필드를 추가하면 페이지 상단에 검색 표시줄이 나타납니다.이
foreignkey
목록에서 search_fields
필드를 지원하지 않으므로 추가하면 안 됩니다.4. 제목을 기반으로 슬러그 미리 채우기.
slug
필드를 기반으로 자동 생성된 title
를 가져오고 싶습니다. 이렇게 하려면 prepopulated_fields
에 ArticleAdmin
라는 사전을 만들어야 합니다.# admin.py file
from django.contrib import admin
from .models import Article
class ArticleAdmin(admin.ModelAdmin):
# displaying title, author and publish date.
list_display = ['title', 'author', 'published_on']
# creating filter to sort the entries by publish date.
list_filter = ['published_on',]
# creating the search bar.
search_fields = ['title', 'body']
# prepopulating slug in the basis of title.
prepopulated_fields = {'slug': ('title',)}
admin.site.register(Article, ArticleAdmin)
이제 slug 필드는
title
필드에 의해 자동으로 생성됩니다.5. 게시 날짜별로 기사 항목을 정렬합니다.
이렇게 하려면
ordering
의 ArticleAdmin
목록에 정렬하려는 필드를 추가하기만 하면 됩니다.# admin.py file
from django.contrib import admin
from .models import Article
class ArticleAdmin(admin.ModelAdmin):
# displaying title, author and publish date.
list_display = ['title', 'author', 'published_on']
# creating filter to sort the entries by publish date.
list_filter = ['published_on',]
# creating the search bar.
search_fields = ['title', 'body']
# prepopulating slug in the basis of title.
prepopulated_fields = {'slug': ('title',)}
# ordering the model by the publish date.
ordering = ['published_on',]
admin.site.register(Article, ArticleAdmin)
이제 게시 날짜별로 기사를 주문하는 옵션이 표시됩니다.
추가팁💡
일부 연산이나 계산으로 모델의 필드를 표시하려는 경우 모델에서 전용 메서드를 만든 다음
list_display
의 ModelAdmin
에서 메서드 이름을 호출할 수 있습니다.예를 들어
body
의 Article
의 처음 50자를 표시하려면 다음과 같이 할 수 있습니다.# models.py
from django.db import models
class Article(models.Model):
title = models.CharField(max_length=250)
slug = models.SlugField(max_length=250)
author = models.ForeignKey(User,
on_delete=models.CASCADE,
related_name='articles')
body = models.TextField()
published_on = models.DateTimeField(auto_now_add=True)
def __str__(self):
return self.title
def content(self):
''' represents the first 50 characters of the body
field.'''
return f"{self.body[:50]} ..."
# admin.py file
from django.contrib import admin
from .models import Article
class ArticleAdmin(admin.ModelAdmin):
# displaying title, author and publish date.
list_display = ['title', 'content', 'author', 'published_on']
# creating filter to sort the entries by publish date.
list_filter = ['published_on',]
# creating the search bar.
search_fields = ['title', 'body']
# prepopulating slug in the basis of title.
prepopulated_fields = {'slug': ('title',)}
# ordering the model by the publish date.
ordering = ['published_on',]
admin.site.register(Article, ArticleAdmin)
끝났습니다.
제 글을 읽어주셔서 감사합니다.
Reference
이 문제에 관하여(모델용 Django 관리 도구.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/vijaysoni007/django-admin-tools-for-a-model-5g7i텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)