2017-02-08 12 views
1

私はDjangoを初めて使いました。このフォームをPOSTにしようとしています。フォームに関するドキュメントを読んだことがありますが、form.pyファイルを作成すると、Jqueryの日付ピッカーを実装する方法やメニューをドロップする方法がわからないため、少し混乱します。HTMLテンプレートを使用したDjangoフォーム

私はテンプレートを作成しました。私はそれにアクセスすることができ、私が望む方法を正確にフォーマットしますが、POSTにどのように取得するのか練習できません。考え方は、フォーム内のデータを取り出し、それをPostgresテーブルに挿入することです。

{% extends 'website/header.html' %} 
{% block content %} 
    <p><b>Submit Job</b></p> 
    <form action="" method="post"> 
    {% csrf_token %} 
     <b>Select Asset to transcode</b> 
     <p>Material ID: 
      <input type="text" name="material_id" size="30" value="" id="keyword"/> 
     </p> 
     <p>Profile: 
      <select name="workflow"> 
       <option value="">Select a transcode Profile</option> 
       {% for i in object_list %} 
        <option value="{{ i.name }}">{{ i.name }}</option> 
       {% endfor %} 
      </select> 
     </p> 
     <script> 
      $(function() { 
       $("#start_datepicker").datepicker({ 
        dateFormat: 'dd-mm-yy' 
       }); 
      }); 
     </script> 
     <p>License Start Date: <input type="text" id="start_datepicker" name="start_date"></p> 
     <script> 
      $(function() { 
       $("#end_datepicker").datepicker({ 
        dateFormat: 'dd-mm-yy' 
       }); 
      }); 
     </script> 
     <p>License End Date: <input type="text" id="end_datepicker" name="end_date"></p> 
     <p> 
      <input type="submit" name="submit" /> 
     </p> 
    </form> 
{% endblock %} 

Views.pyここ

from django.shortcuts import render 

def submit(request): 
    if request.method == 'POST': 
     material_id = request.POST['material_id'] 
     workflow = request.POST['workflow'] 
     start_date = request.POST['start_date'] 
     end_date = request.POST['end_date'] 
     return render(request, 'submit/submit.html') 

    else: 
     return render(request, 'submit/submit.html') 

私はエラーになっていているテンプレートsubmit.py:

Method Not Allowed (POST): /submit/ 
[08/Feb/2017 17:28:49] "POST /submit/ HTTP/1.1" 405 0 

私が間違って何をしているのですか?あなたのurls.pyファイルが何かを持っていることurl.py

from django.conf.urls import url 
from django.views.generic import ListView 
from asset_db.models import Profiles 

urlpatterns = [ 
    url(r'^$', ListView.as_view(queryset=Profiles.objects.all().order_by("id"), template_name='submit/submit.html')), 
] 

答えて

1

このURLにはListViewが使用されています。しかし、ListViewはGET要求のみを許可しました。それがPOSTメソッドでリクエストを受け取ったときの理由です。それはエラーメソッドが許可されていません。 このurlのビューをviews.pyに作成し、getメソッドとpostメソッドを定義します。

+0

助けてくれてありがとう、本当に私は何をする必要があるか理解してくれました。 – Lewis909

1

チェックを提出

個人用サイト

from django.conf.urls import url, include 
from django.contrib import admin 

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^', include('website.urls')), 
    url(r'^submit/', include('submit.urls')), 
    url(r'^repo/', include('asset_db.urls')), 
] 

url.py:ここでEDIT

は、URLファイルですlike

from django.conf.urls import patterns, url 

urlpatterns = patterns('', 
    url(r'^submit/$', 'yourapp.views.submit'), 
) 

datepickerは問題に関連していません。ほとんどの場合、別のビューに投稿します。すべてのURLとビュー名を確認してください。

1

あなたの送信URLにマップされたビューはありません。/submitの下にある唯一のURLはListViewです。

0

ビューを作成し、ListViewを使用しないことを推奨したので、この問題は修正されました。私は、コンテキストを作成するとヘルプはDjango Tutorial part 3を使用

[09/Feb/2017 08:55:22] "GET /submit/ HTTP/1.1" 200 3300 
[09/Feb/2017 08:55:29] "POST /submit/success/ HTTP/1.1" 200 2043 

は、更新されたテンプレートのsubmit.htmlに

{% extends 'website/header.html' %} 
{% block content %} 
    <p><b>Submit Job</b></p> 
    <form action="{% url 'success' %}" method="post"> 
    {% csrf_token %} 
     <b>Select Asset to transcode</b> 
     <p>Material ID: 
      <input type="text" name="material_id" size="30" value="" id="keyword"/> 
     </p> 
     <p>Profile: 
      <select name="workflow"> 
       <option value="">Select a transcode Profile</option> 
       {% for i in profiles %} 
        <option value="{{ i.name }}">{{ i.name }}</option> 
       {% endfor %} 
      </select> 
     </p> 
     <script> 
      $(function() { 
       $("#start_datepicker").datepicker({ 
        dateFormat: 'dd-mm-yy' 
       }); 
      }); 
     </script> 
     <p>License Start Date: <input type="text" id="start_datepicker" name="start_date"></p> 
     <script> 
      $(function() { 
       $("#end_datepicker").datepicker({ 
        dateFormat: 'dd-mm-yy' 
       }); 
      }); 
     </script> 
     <p>License End Date: <input type="text" id="end_datepicker" name="end_date"></p> 
     <p> 
      <input type="submit" name="submit" /> 
     </p> 
    </form> 
{% endblock %} 

Webサーバーの結果をviews.py

from django.shortcuts import render 
from asset_db.models import Profiles 


def submit(request): 
    profiles = Profiles.objects.order_by('-id') 
    context = {'profiles': profiles} 
    return render(request, 'submit/submit.html', context) 


def success(request): 
    profiles = Profiles.objects.order_by('-id') 
    context = {'profiles': profiles} 
    return render(request, 'submit/success.html', context) 
を提出更新しました。私に正しい方向を指してくれてありがとう!

関連する問題