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에 적용이 됩니다.
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'),
/myapp/blog/views.py 소스일부
query_set = PyBlog.objects.filter(id=self.kwargs['pk'], use_yn = 'Y')