점프 투 장고 질문 수정 및 삭제 관련

분명 제목과 내용이 출력되긴 하는데, 담고 있는 텍스트가 아니라

제목
django.db.models.query_utils.DeferredAttribute object at 0x0000021EB32AA4F0
내용
django.db.models.query_utils.DeferredAttribute object at 0x0000021EB32AA550

와 같이 객체 정보가 출력되어버립니다. 어디서 문제가 난 걸까요?

sysl6646 472

M 2023년 7월 2일 3:09 오후

작성하신 views.py 파일과 템플릿을 보여주세요. - 박응용님, 2023년 7월 2일 3:18 오후 추천 , 대댓글
@박응용님 ``` #question_views.py from django.contrib import messages from django.contrib.auth.decorators import login_required from django.shortcuts import render, get_object_or_404, redirect from django.utils import timezone from django.db import models from ..forms import QuestionForm from ..models import Question MESSAGE_TAGS = { messages.ERROR: 'danger' } @login_required(login_url='common:login') def question_create(request, category=0): if request.method == 'POST': form = QuestionForm(request.POST) if form.is_valid(): question = form.save(commit=False) #commit=False는 임시 저장 question.author = request.user question.create_date = timezone.now() question.save() question.category = models.IntegerField(category) return redirect('pybo:index') else: #GET 방식 form = QuestionForm() context = {'form': form} return render(request, 'pybo/question_form.html', context) @login_required(login_url='common:login') def question_modify(request, question_id): question = get_object_or_404(Question, pk=question_id) if request.user != question.author: messages.error(request, "수정권한 없음") return redirect('pybo:detail', question_id = question.id) if request.method == "POST": #instance를 기준으로 QuestionForm을 생성하지만 request.POST의 값으로 덮어쓰라는 의미 form = QuestionForm(request.POST, instance=question) if form.is_valid(): question = form.save(commit=False) question.modify_date = timezone.now() question.save() return redirect('pybo:detail', question_id = question.id) else: form = QuestionForm(instance=Question) context = {'form': form} return render(request, 'pybo/question_form.html', context) @login_required(login_url='common:login') def question_delete(request,question_id): question = get_object_or_404(Question, pk=question_id) #사용자 다를 떄 에러 표시 if request.user != question.author: messages.error(request, "삭제권한 없음") return redirect('pybo:detail', question_id=question.id) question.delete() return redirect('pybo:index') @login_required(login_url='common:login') def question_vote(request, question_id): question = get_object_or_404(Question, pk=question_id) if request.user == question.author: messages.error(request, "본인이 작성한 글은 추천이 불가합니다") else: question.voter.add(request.user) return redirect('pybo:detail', question_id=question.id) ``` ``` <!--question_form.html--> {% extends 'base.html' %} {% block content %} <div class="container"> <h5 class="my-3 border-bottom pb-2">게시글 등록</h5> <form method="post"> {% csrf_token %} {% if form.errors %} <div class="alert alert danger" role="alert"> {% for field in form %} {% if field.errors %} <div> <strong>{{ field.label }}</strong> {{ field.errors }} </div> {% endif %} {% endfor %} </div> {% endif %} <div class="mb-3"> <label for="subject" class="form-label">제목</label> <input type="text" class="form-control" name="subject" id="subject" value="{{ form.subject.value|default_if_none:'' }}"> </div> <div class="mb-3"> <label for="content" class="form-label">내용</label> <textarea class="form-control" name="content" id="content" rows="10">{{ form.content.value|default_if_none:'' }}</textarea> </div> <button type="submit" class="btn btn-primary">저장하기</button> </form> </div> {% endblock %} ``` 여깄습니다 - sysl6646님, 2023년 7월 2일 3:35 오후 추천 , 대댓글
@sysl6646님 지금 질문 상세에서 제목이 안보인다고 하셨으니 관련있는 view를 보여 주세요. 그리고 댓글 말고 일밥 답변에 적어 주세요. - 박응용님, 2023년 7월 2일 3:42 오후 추천 , 대댓글
@박응용님 넵 - sysl6646님, 2023년 7월 2일 7:01 오후 추천 , 대댓글
목록으로
2개의 답변이 있습니다. 1 / 1 Page
        <div class="mb-3">
            <label for="subject" class="form-label">제목</label>
            <input type="text" class="form-control" name="subject" id="subject"
                   value="{{ form.subject.value|default_if_none:'' }}">
        </div>
        <div class="mb-3">
            <label for="content" class="form-label">내용</label>
            <textarea class="form-control" name="content"
                      id="content" rows="10">{{ form.content.value|default_if_none:'' }}</textarea>
        </div>
        <button type="submit" class="btn btn-primary">저장하기</button>

sysl6646

2023년 7월 2일 7:02 오후

템플릿 말고 views.py 파일을 보여주세요. - 박응용님, 2023년 7월 2일 8:06 오후 추천 , 대댓글

```
@login_required(login_url='common:login')
def question_modify(request, question_id):
question = get_object_or_404(Question, pk=question_id)
if request.user != question.author:
messages.error(request, "수정권한 없음")
return redirect('pybo:detail', question_id = question.id)

if request.method == "POST":
    #instance를 기준으로 QuestionForm을 생성하지만 request.POST의 값으로 덮어쓰라는 의미
    form = QuestionForm(request.POST, instance=question)
    if form.is_valid():
        question = form.save(commit=False)
        question.modify_date = timezone.now()
        question.save()
        return redirect('pybo:detail', question_id = question.id)
else:
    form = QuestionForm(instance=Question)
context = {'form': form}
return render(request, 'pybo/question_form.html', context)
    ```

문제가 된 question_modify 함수입니다(question_views.py 내에 위치)
글 작성시 정상적으로 출력되는데 수정 페이지에만 들어가면 저렇게 나오네요...

sysl6646

M 2023년 7월 2일 8:11 오후

instance=Question 대신 instance=question을 넣어 주셔야 합니다. - 박응용님, 2023년 7월 2일 10:53 오후 추천 , 대댓글
@박응용님 아 미처 못 봤네요 감사합니다, 혹시 폼의 instance에 객체가 아닌 모델 그 자체를 넣으면 왜 출력이 저렇게 나오게 되는지 알 수 있을까요? - sysl6646님, 2023년 7월 2일 11:19 오후 추천 , 대댓글