[Django] 장고 Models를 활용한 데이터베이스 처리#2_admin을 통한 데이터 관리

아직·2022년 6월 21일
0
post-thumbnail

1)

from django.contrib import admin
from django.urls import path, include

...

urlpatterns = [
    path('admin/', admin.site.urls),

"admin/로 시작하는 주소 요청에 대해서는 django.contrib에 있는 admin 앱에서 처리하겠다."

2)

instagram 앱에서 만든 모델을 admin에서 사용하기 위해서는 admin.py에 따로 등록을 해줘야한다.

3)

class Post(models.Model):
    message = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)

auto_now_add는 Post 모델을 통해서 record가 db에 insert될 때 자동으로 입력되는 명령이라서 TextField처럼 표시되지 않는다.

4)

@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    list_display= ['id', 'message', 'created_at', 'updated_at']

".models에서 import한 Post란 class를 감싸서 기능을 바꿀래."

"PostAdmin이란 class를 만드는데, 위에서 import한 admin에서의 ModelAdmin을 상속 받겠다."

"모델의 리스트에 나타날 컬럼을 정해줄래."

5)

def __str__(self):
        return self.message

".models의 Post에서 기존 Post object () 형태로 제공되는 형태를 TextField에 입력된 값으로 대체할래."

6)
Input

class Post(models.Model):
    message = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    
    def __str__(self):
        return self.message
    __str__.short_description = "이것도 가능"

    def message_length(self):
        return len(self.message)
    message_length.short_description = "메세지 글자 수"

Output

__str__은 매직 메소드여서 그런지 메소드.short_description이 적용되지 않았다.

7)

@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    list_display = ['id', 'message', 'message_length', 'created_at', 'updated_at']
    list_display_links = ['message']

    def message_length(self, post):
        return len(post.message)

자주 쓰는 경우 위와 같이 .models에서 정의해 주겠지만, admin.py에서 장식자 하에 정의해줄 수도 있다.

8)
Input

@admin.register(Post)
class PostAdmin(admin.ModelAdmin):
    list_display = ['id', 'message', 'message_length', 'created_at', 'updated_at']
    list_display_links = ['message']
    search_fields = ['message']

Output

search_fields를 구현 및 사용할 때, q라는 이름의 query string으로 '세번'이 전달됨을 볼 수 있다.

더 자세한 내부 시퀀스는 "instagram 앱의 .models 파일의 Post 클래스를 가져와서, 그 클래스로 생성한 모든 객체들들 사이에서, 필터로 '세번'이라는 키워드를 가진 쿼리셋만 걸러줘, 그리고 그 쿼리셋을 저장(qs)한 뒤에, 그 쿼리셋의 쿼리 부분(qs.query)만 프린트해 줘." 정도로 이해할 수 있다.

0개의 댓글