LIT_11 Django(1)

여재우·2023년 10월 31일
0

LIT

목록 보기
12/21

LIT(Learn I Today) 내가 오늘 배운 것들에 대한 정리


Html 연동

def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    context = {'questions': latest_question_list}
    return render(request, 'polls/index.html', context)  
  • return render 부분
    • 'polls/index.html' 부분에서 polls는 polls/urls.py 파일에서 app_name = 'polls'라고 지정해 줬기 때문에 'polls/index.html'이라고 써야한다.

에러 처리

def vote(request, question_id):
    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': f"선택이 없습니다. id={request.POST['choice']}"})
    else:
        selected_choice.votes = F('votes') + 1
        selected_choice.save()
        return HttpResponseRedirect(reverse('polls:result', args=(question.id,)))
  • get_object_or_404
    • question_id를 찾지못하면 404에러로 인식하게 한다.
  • try /except를 사용해서 선택을 하지 않았을 시 에러 메시지를 띄운다.
  • 'F('votes') + 1' 이부분은 F를 써서 DB에 직접 카운트가 올라가게 한다.

Admin 페이지 커스터 마이징

  • Choice 보게 하는 방법
class ChoiceInline(admin.TabularInline):
    model = Choice
    extra = 3
  • extra = 3 을 하면 만들 선택지들 밑에 추가로 3개의 만들 수 있는 선택지 창이 나온다.

  • Question 창에서 칼럼 명을 바꾸는 방법
class QuestionAdmin(admin.ModelAdmin):
    fieldsets = [
        ('질문 섹션', {'fields': ['question_text']}),
        ('생성일', {'fields': ['pub_date'], 'classes': ['collapse']}),
    ]
    list_display = ('question_text', 'pub_date', 'was_published_recently')
    readonly_fields = ['pub_date']
    inlines = [ChoiceInline]
    list_filter = ['pub_date']
    search_fields = ['question_text', 'choice__choice_text']
  • fieldsets를 이용하여 필드이름을 지정해주고 어떤 필드를 바꿀건지 지정한다.
    • 'classes': ['collapse'] 를 사용하면 생성일을 숨겨둘 수 있다.
profile
꾸준히 학습하고 기록하기 위한 log

0개의 댓글