모델용 Django 관리 도구.

18007 단어
이 튜토리얼에서는 django admin의 모델에 대한 몇 가지 기본 제공 도구와 이를 적용하는 방법에 대해 배웁니다.

모델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 필드의 문자열 표현만 표시하고 싶지 않습니다. 또한 모델 항목에 authorpublished_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_ontitle를 모두 나타냅니다.

    2. 필터를 생성하여 모델 항목을 정렬합니다.



    이렇게 하려면 ArticleAdminlist_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_fieldsArticleAdmin라는 사전을 만들어야 합니다.

    # 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. 게시 날짜별로 기사 항목을 정렬합니다.



    이렇게 하려면 orderingArticleAdmin 목록에 정렬하려는 필드를 추가하기만 하면 됩니다.

    # 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_displayModelAdmin에서 메서드 이름을 호출할 수 있습니다.

    예를 들어 bodyArticle의 처음 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)
    


    끝났습니다.

    제 글을 읽어주셔서 감사합니다.

    좋은 웹페이지 즐겨찾기