django 011 | Form


Form実習


=>formを使用すると、最後にピクチャファイルバーを追加してビュー、urls、すべてを置き換える手間を回避できます.
検証=>
  • ブログアプリケーションのフォーム.pyファイル
  • の生成
    from django import forms
    from .models import blog
    class blogform(forms.ModelForm):
        class Meta : #내가 아래에 있는 필드들 적절히 연결해주겟다~
            model=blog
            fields=['title', 'writer', 'body', 'image']
            #필드에서 내가 원하는 아이들만 pick해서 blogForm으로 해주겟당~
  • views.blogform
  • をpyにインポート
    from .forms import blogform
  • views.py洙は続けています&new.html
  • の変更
  • の既存のnew関数はnewである.htmlをインポートした子供なら、今すぐフォームも渡します.
    def new(request):
        form=blogform()
        return render(request, 'new.html',{form : form})
  • new.html
  • の変更
  • 既存のnew.html
  •     <form action ="{% url 'create' %}" method="post" enctype="multipart/form-data">
            {% csrf_token %} 
            제목 : <input type="text" name="title"><br><br>
            작성자 : <input type="text" name="writer"><Br><br>
            본문 : <textarea name="body" id="" cols="30" rows="10"></textarea><br>
            사진 : <input type="file" name="image">
            <br><button type="submit">저장하기</button>
        </form>
    修正後のhtml
  •      <form action ="{% url 'create' %}" method="post" enctype="multipart/form-data">
          {% csrf_token %} 
        {{form}}
        {% endblock %}
           </form>
    これでnewhtmlサーバに戻る
  • がpタグに包まれて送信場合、
  •       {{form.as_p}}

    そろえる
    (+)テーブルで包むこともできます
            <table>
          {{form.as_table}}
        </table>
  • 作成したばかりの複雑なcreate内のblogformも
  • を修復できます.
  • 既存create form
  • def create(request): #new.html에서 오는 정보를 받아줘야 함
        new_blog=blog()
        new_blog.title=request.POST['title']
        new_blog.writer=request.POST['writer']
        new_blog.body=request.POST['body']
        new_blog.pub_date=timezone.now()
        new_blog.image=request.FILES['image']
        new_blog.save()
        return redirect('detail', new_blog.id)
  • 修正
  • def create(request): #new.html에서 오는 정보를 받아줘야 함
        form=blogform(request.POST, request.FILES)
        if form.is_valid: #유효성 검사
            new_blog=form.save(commit=False)
            #blogform엔 pub_date가 들어가지 않는데그냥 냅둔다면 빈칸으로 쌓일거기 때문에
            #commit false로 임시저장 시캬노코 pubdate 추가해야함
            new_blog.pubdate=timezone.now()
            new_blog.save() #pub도 추가했으니 최종 저장
            return redirect('detail', new_blog.id)
        return redirect('home') #form 유효안하면 home으로