목차
학습 내용
Django
- 뷰와 템플릿
- 템플릿에서 제어문 사용
- 상세 페이지 링크
- 에러 처리하기 : get_object_or_404, try ~ except
- 폼 제출
- admin 페이지 커스터마이징 : 원하는 필드, 보는 방식, 목록 필터 및 검색
새로 알게 된 것
get_object_or_404
question = get_object_or_404(Question, pk=question_id)
폼을 제출할 때 아무것도 고르지 않고 제출한 경우 에러 처리하기
try:
selected_choice = question.choice_set.get(pk=request.POST['choice'])
except(KeyError, Choice.DoesNotExist):
return render(request, 'polls/detail.html', {'question': question, 'error_message': '선택이 없습니다'})
위 경우에서는 폼에서 아무것도 고르지 않은 경우와 찾는 데이터가 없는 경우의 에러를 처리한다.
- Model.DoesNotExist : get을 사용해 데이터를 조회할 때 찾는 데이터가 없을 때 발생하는 에러
- KeyError : 키 값을 입력하지 않았을 때 발생하는 에러
Django F 객체
from django.db.models import F
selected_choice.votes = F('votes') + 1
F 객체는 데이터베이스에서 필드 값을 가져와서 작업을 수행할 때 사용한다.
필드 값을 업데이트할 때 데이터베이스에서 수행되기 때문에 동시에 업데이트 요청이 발생해도 데이터의 일관성을 유지할 수 있다.
reverse에서 값을 전달하는 법
return HttpResponseRedirect(reverse('polls:result', args = (question_id,)))
args를 포함해서 전달한다.
관리자 페이지 커스텀
*inline 옵션
- StackedInline : 상하로 출력됨
- TabularInline : 좌우로 출력됨
class ChoiceInline(admin.TabularInline):
model = Choice
extra = 3 //추가 옵션을 몇개 디폴트로 표시할 것인가
class QuestionAdmin(admin.ModelAdmin):
fieldsets = [
('질문 섹션', {'fields': ['question_text']}),
('생성일', {'fields': ['pub_date'], 'classes': ['collapse']}),
]
inlines = [ChoiceInline]
숨김처리 : classes를 collapse로 지정
*목록에서 검색
list_filter = ['pub_date']
search_fields = ['question_text', 'choice__choice_text']
- list_filter : 데이터 필터링
- search_fields : 데이터 검색(검색어 입력)
느낀 점
장고에서 관리자 페이지를 커스텀할 수 있는 기능이 많다는 것을 알게 되었다.
그리고 개발을 할 때 항상 예외 사항에 대해 생각을 하면서 에러를 처리해야겠다.
'기록 > TIL' 카테고리의 다른 글
[TIL] 231102 - 데브코스 18일차 (0) | 2023.11.02 |
---|---|
[TIL] 231101 - 데브코스 17일차 (1) | 2023.11.01 |
[TIL] 231030 - 데브코스 15일차 (0) | 2023.10.30 |
[TIL] 231027 - 데브코스 12일차 (0) | 2023.10.27 |
[TIL] 231026 - 데브코스 11일차 (0) | 2023.10.26 |