두 개의 클래스로 된 모델 내용을 하나의 페이지에서 입력하고 싶습니다

조회수 1493회

장고 공부를 시작한지 얼마 안되는 초보입니다. 아래와 같은 모델 내용 전체를 하나의 페이지(HTML)에서 한번에 폼으로 입력 받아 저장하려면 어떻게 해주어야 하나요? 클래스 뷰를 사용하고 있습니다.

from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=50)
    email = models.EmailField()

    def __str__(self):
        return self.name

class Entry(models.Model):
    headline = models.CharField(max_length=255)
    body_text = models.TextField()

    def __str__(self):
        return self.headline
  • 이름 : __________
  • 이메일 : __________
  • 제목 : __________
  • 내용 ______________________________


  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • Form을 만들고 거기서 들어오는 입력을 받아서 해당 Model의 테이블에 저장해 주면 됩니다.

    forms.py를 이렇게 준비 하시고

    from django import forms
    
    class AuthorEntryForm(forms.Form):
        name = forms.CharField(label='name', max_length=30)
        email = forms.EmailField(label='email')
        headline = forms.CharField(label='headline', max_length=30)
        body_text = forms.CharField(label='body_text', max_length=100)
    

    views.py에서 POST요청과 GET을 구분해서 다음과 같이 처리합니다.

    def forms_test(request):
        # POST인 경우
        if request.method == 'POST':
            form = AuthorEntryForm(request.POST)
            if form.is_valid():
                name = form.cleaned_data['name']
                email = form.cleaned_data['email']
                headline = form.cleaned_data['headline']
                body_text = form.cleaned_data['body_text']
                print(name,email,headline,body_text)
                #여기가 가져온 정보를 저장하는 부분
                Author(name=name,email=email).save() 
                Entry(headline=headline, body_text=body_text).save() 
                return HttpResponse("Success")
        # Get인 경우, 폼을 그려주기
        else:
            form = AuthorEntryForm()
    
        return render(request, 'form_test.html', {'form': form})
    

    form_test.html에는 다음과 같은 내용을 넣으세요. render에서 전달받은 form을 그려주는 코드입니다.

    <form action="/forms_test/" method="post">
        {% csrf_token %}
        {{ form }}
        <input type="submit" value="Submit" />
    </form>
    
    • 답변 고맙습니다. 문제 해결하는데 많은 영감을 얻었습니다. 사실 원래 모델에는 ForeignKey가 있어서 그 문제를 해결하느라 인사가 늦었습니다. 공부 방법에 대해서 궁금한게 있는데요, 프로그램 경험은 없고 파이썬 온라인 강좌 한번 듣고 장고 튜토리얼 해보고 장고 공식 문서 참고해가면서 제가 생각해왔던 서비스를 만들고 있습니다. 웹 서비스를 잘 만들기 위해서는 현재와 같은 방법으로 계속 하는 것이 좋을지 아니면 파이썬을 좀 더 깊이 공부해야 좋을지 모르겠네요. 아무튼 앞으로도 종종 애용하겠습니다. ^^* 알 수 없는 사용자 2016.5.12 15:39
    • 일단 한 번 배웠으면 만들고 싶은걸 만드시면서 모르는 문법이 나왔을때 그 부분에 대해서만 찾아보는 정도로 파이썬을 공부하시는게 좋다고 생각합니다. 그래야 재미가 있더라구요. 정토드 2016.5.12 17:31

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)