본문 바로가기
기록/TIL

[TIL] 231031 - 데브코스 16일차

by 투말치 2023. 10. 31.

목차

    반응형

    학습 내용

    Django

    - 뷰와 템플릿

    - 템플릿에서 제어문 사용

    - 상세 페이지 링크

    - 에러 처리하기 : get_object_or_404, try ~ except

    - 폼 제출

    - admin 페이지 커스터마이징 : 원하는 필드, 보는 방식, 목록 필터 및 검색

     

     

    새로 알게 된 것

     

    get_object_or_404

    question = get_object_or_404(Question, pk=question_id)
    모델에서 값을 읽어올 때 못 찾아온 경우에 대한 에러 처리는 get_object_or_404를 사용한다.

     

    폼을 제출할 때 아무것도 고르지 않고 제출한 경우 에러 처리하기

    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