본문 바로가기

67 Django ChoiceField - selectBox

67.1 포스팅 사용여부(글 노출) 기능

글을 다 작성하지 못한 상태에서 작성글이 노출되면 안되기 때문에
글 노출 여부를 판단하는 사용여부 필드를 추가하겠습니다.

장고의 모델의 ChoiceField 기능을 이용하여
관리자페이지에서 글 등록시 셀렉트 박스에서 선택(yes/no) 할수 있게 작업하였습니다.

장고 모델 Choice 가이드 확인하기 https://docs.djangoproject.com/en/4.1/ref/models/fields/

67.2 모델에 choices 추가 - models.py

PyBlog 테이블에
USE_YN_CHOICES 라는 튜플과 db에 charField 타입의 use_yn 필드를 정의하고
둘이 연결(choices=USE_YN_CHOICES) 합니다.

USE_YN_CHOICES 튜플의
1번째 요소는 PyBlog테이블의 use_yn 컬럼에 입력되는 값이고
2번째 요소는 admin, form 등 화면에서 보여주는 텍스트입니다.

/myapp/blog/models.py 소스 일부

class PyBlog(models.Model):
    USE_YN_CHOICES = (( 'Y','Yes'),('N','No' ))
    ...
    ...
    use_yn     = models.CharField(max_length=1, default='Y', choices=USE_YN_CHOICES)

67.3 모델에 choices 추가 - models.py

모델에 작성한 use_yn 필드를 추가합니다.

makemigrations : 모델의 변경사항의 새마이그레이션을 생성합니다.
migrate : 변경된 마이그레이션을 적용합니다.

python manage.py makemigrations

python manage.py migrate

makemigrations을 진행하시면
아래과 같이 migrations폴더에 파일이 생성 되고 db에 적용이 됩니다.
migrations 파일


makemigrations/ migrate 가이드: https://docs.djangoproject.com/en/4.1/ref/django-admin/#django-admin-makemigrations

67.4 관리자에 use_yn 적용하기 - admin.py

관리자페이지 목록/등록/수정 페이지에 나올수 있도록
use_yn을 추가합니다.

myapp//blog/admin.py

class containPythonBlog(admin.TabularInline):
    model = PyBlogDetail
    extra = 3
    formfield_overrides = {
        MarkdownxField: {'widget': AdminMarkdownxWidget}
    }
    # fields = ('sub title', 'img url','img size','content_body')

class admin_pythonblog(admin.ModelAdmin):
    list_display = ('id','title','use_yn','regist_dt','update_dt')

    fieldsets = [ 
        (None, { 'fields': ['title','regist_dt','use_yn'] }),
    ]
    inlines = [ containPythonBlog ]

admin.site.register(PyBlog, admin_pythonblog)
admin.site.register(PyBlogDetail,MarkdownxModelAdmin)

67.5 좌측메뉴 상세페이지 및 쿼리 수정

common/common_views.py 와blog/views.py 에 filter 로 조건을 넣어줍니다.

/myapp/common/common_views.py 소스일부

"blog_menu":PyBlog.objects.all().filter( use_yn = 'Y'),


view 파일

/myapp/blog/views.py 소스일부

query_set = PyBlog.objects.filter(id=self.kwargs['pk'], use_yn = 'Y')

67.6 적용확인

현재 작성중인 글의 사용여부를 N으로 등록하였습니다.

pythonblog 메뉴

홈페이지에서는 67번글이 나오지 않습니다.
잘 적용되었습니다.

현재글 : 67 Django ChoiceField - selectBox
Comments
Login:

Copyright © PythonBlog 2021 - 2022 All rights reserved
Mail : PYTHONBLOG