• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

데이터 새성시 forms.py, models.py 관련문의

23.07.02 08:44 작성 23.07.02 08:44 수정 조회수 161

0

예제 내용 그대로 수행하였고요. 몇가지 질문드립니다.

  1. forms.py 에서의 title 정의와, models.py에서 내린 title 정의가 서로 다를 경우, forms.py 가 우선시 되는 것 같은데요. 속성값(max_length)이 달라도 상관없는 지..

     

    [froms.py]

    class PostForm(forms.Form): title = forms.CharField(label='제목', max_length= 2)

     

    [models.py]

    class PostForm(forms.Form): title = forms.CharField(label='제목', max_length= 2)

    content = forms.CharField(label='내용', widget = forms.Textarea)

     

  2. ModelForm 을 사용시 model =Post 로 가져오는 것 같은데, 기본적인 models 내용은 참조하게 되는건가요?

     

    class PostForm(ModelForm):

    class Meta :

    model = Post

    fields = ['title','content']

    labels = {

    'title' : _('제목'),

    'content': _('내용'),

    }

    help_texts={

    'title' : _('제목을 입력해주세요.'),

    'content' : _('내용을 입력해주세요. '),

    }

    error_messages = {

    'name' : {

    'max_length': _("제목이 너무 깁니다. 30자 이하로 해주세요.")

    }

    }

  3. title 입력 폼에서 성공시에는 confirm 으로가고, max 길이 오류시에 create/로 가도록 했었는데요.

    [views.py]

    def confirm(request):

    form = PostForm(request.POST)

    if form.is_valid():

    return render(request, 'second/confirm.html', {'form': form})

    return HttpResponseRedirect('/second/create/')

     

    ModelForm 으로 사용시에는 동일한 코드이고 다만 에러가 나면 list화면으로 넘어가도록 되어 있는데, 성공을 해도 list 화면으로 넘어가는 이유를 모르겠습니다.

    [views.py]

    def create(request):

    if request.method =='POST':

    form = PostForm(request.POST)

    if form.is_valid():

    new_item = form.save()

    return HttpResponseRedirect('/second/list/')

     

    form = PostForm()

    return render(request, 'second/create.html', {'form':form})

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.07.04

안녕하세요, 인프런 AI 인턴이에요.

forms.py와 models.py에서 각각 title을 정의하였을 때, forms.py의 정의가 우선시 되는 것은 맞아요. 만약 두 개의 정의가 서로 다르다면, forms.py의 정의가 적용됩니다. 속성값(max_length)이 달라도 상관이 없어요.

ModelForm을 사용할 때, model = Post로 가져오는데, ModelForm은 기본적으로 model의 정보를 참조합니다. 따라서 models.py에 있는 내용을 참조해서 form을 만들어줄 수 있습니다.

마지막으로 title 입력 폼에서 성공시에는 confirm으로 가고, max 길이 오류시에는 create로 가도록 구성했다는데요. views.py에서 confirm 함수와 create 함수를 정의하여야 하며, form.is_valid()가 True일 때 confirm 모듈로 이동할 수 있도록 설정해주어야 합니다.

더 자세한 내용이 필요하시다면, 코드의 전문을 알려주시거나 구체적인 문제를 말씀해주세요. 더 정확한 도움을 드릴 수 있도록 도와드리겠습니다. 감사합니다.

류재안님의 프로필

류재안

질문자

2023.07.05

안녕하세요. 답변 감사드립니다.

 

세번째 질문을 다시 설명드립니다.

ㅇ title 입력 폼에서 성공시에는 confirm 으로가고, max 길이 오류시에 create/로 가도록 구현

=> 이건 잘 돌아가구요.

두번째에서, create 함수 내에 confrim 의 역할을 넣는다고 했고, 그러면서 max 길이 오류일때에 list로 간다고 했거든요.

그런데 max 길이가 오류이든 아니든 list로 가는 게 이해가 안되서요.

성공하면 list로 가고, 오류이면 create 에 남도록 하려면 어떻게 수정해야 하나요?