2017-07-01 7 views
1

私のWebページが2部、上部で構成され、ユーザーが表形式でデータベース内のデータ下部しばらく表示し、すべてのデータを入力してみましょうセクションであります。上部の「追加」ボタンを選択すると、そのデータはデータベースに保存され、Webページの下部の表に出力されます。一度「追加」ボタンを選択すると、テーブルを表示することはできますか?現在、コードが実行しているのは、「追加」ボタンが選択されているときに新しいフォームをロードした後にテーブル全体が消える場合です。私はに手動でこのアドレスを再度入力する必要があります "http://127.0.0.1:8000/hrfinance/lscholarship/"その後、テーブルだけが表示されます。リフレッシュしてもページは機能しません。以下は、私の中のコードがあるリロードページに自動的にすることなく、URLを再入力すると、再びジャンゴ

views.py:

def scholarship(request, id=None): 
    query_results = [] 
    if request.method == "POST": 
     form = ScholarshipForm(request.POST) 
     if form.is_valid(): 
      scholarship = form.save(commit=False) 
      scholarship.save() 
    else: 
     form = ScholarshipForm() 
     id = request.GET.get('scholarship') 
    query_results = Scholarship.objects.all() 
    data = { 
      'query_results':query_results, 
      'form': form 
      } 
    return render(request, 'hrfinance/add_remove_scholarship.html', data) 

models.py

class Application(models.Model): 
    studentID = models.CharField("Student ID", max_length=8, validators=[MinLengthValidator(8)], primary_key=True, default="") 
    studentName = models.CharField("Student Name", max_length=500, default="") 
    scholarship = models.TextField("Scholarship") 

add_remove_scholarship.html

<div align="center" > 
<form method="POST" onsubmit="return validation()" action=""> 
{% csrf_token %} 
{{ form.errors }} 
    <p>Upload File: {{ form.doc }}</p> 
    <p>Faculty: {{ form.faculty }} </p> 
    <p>Opening date: <input id="odate" type="date" name="openDate"> </p> 
    <p>Closing date: {{ form.closeDate }} </p> 
    <input type="submit" name="AddScholarship" value="Add Scholarship" > 
</form> 
</div> 
<br></br> 
    <button id="button" type="button">Delete Selected Scholarship</button> 
    <br></br> 
    {{query_results}} 
    <form method="POST" action=""> 
    {% csrf_token %} 
<table id="example" class="display" cellspacing="0" width="100%" border="1.5px"> 
    <tr align="center"> 
     <th> Scholarship </th> 
     <th> Faculty </th> 
     <th> Open Date </th> 
     <th> Close Date </th> 
    </tr> 
    {% for item in query_results %} 
    <tr align="center"> 
     <td>{{item.doc}}</td> 
     <td>{{item.faculty}}</td> 
     <td>{{item.openDate}}</td> 
     <td>{{item.closeDate}}</td> 
    </tr> 
    {% endfor %} 
    </table> 
    </form> 

答えて

0

ベストプラクティスはPost/Redirect/Getパターンを使用することです。これはあなたの問題も解決します:GET要求はフォームをクリアし、新しいクエリ結果を表示します。

フォームが正常に保存された場合は、現在のページにリダイレクトするだけです。ブラウザはGETリクエストを行います。こうすることで、偶発的なフォーム提出を防ぐことができます。

from django.shortcuts import redirect 

def scholarship(request, id=None): 
    query_results = [] 
    if request.method == "POST": 
     form = ScholarshipForm(request.POST) 
     if form.is_valid(): 
      scholarship = form.save(commit=False) 
      scholarship.save() 
      # Return a redirect to the same page 
      return redirect('/path/to/current/page/') 
    ... 
+0

/path/to/current/page/'is:私のurls.pyがこれであれば' lscholarship 'です:url(r'^lscholarship/$ '、views.scholarship、name =' lscholarship ')、?? –

+0

私は 'lscholarship'を試みましたが、 "NoReverseMatch at/hrfinance/lscholarship/ " lscholarship 'のリバースが見つかりません。' lscholarship 'は有効なビュー機能またはパターン名ではありません。私は本当にdjangoの新人ですし、私はそれを学んでいるように助けてください –

+0

'redirect()'を使うと、URLパス( '/ hrfinance/lscholarship /')またはURLの名前のどちらかを使うことができます。 Django。 URL名前空間を使用していますか(つまり、urlconfの 'app_name'属性を設定していますか?)さもなければ、 'redirect( 'lscholarship')'はうまく動作するはずです。 – knbk

1
def scholarship(request, id=None): 
    query_results = [] 
    if request.method == "POST": 
     form = ScholarshipForm(request.POST) 
     if form.is_valid(): 
      scholarship = form.save(commit=False) 
      scholarship.save() 

    else: 
     id = request.GET.get('scholarship') 
    query_results = Scholarship.objects.all() 
    form = ScholarshipForm() 
    data = { 
      'query_results':query_results, 
      'form': form 
      } 
    return render(request, 'hrfinance/add_remove_scholarship.html', data) 

elseの条件の外側にクエリを移動する必要があります。

ただし、データベースの行数が増えると、この方法には時間がかかることがあります。これを行うより良い方法は、jquery Ajaxメソッドを使用してデータベース内のデータを更新し、データベースが更新されるとjavascript/Jqueryを使用して動的に表示することです。

+0

私はジャンゴに初心者ですし、すべての種類を勉強したいので、uは私はjqueryのアヤックスを使用してオフに開始するためのコードの一部を書くことを気にしない:ユーザーは、それはまだPOSTリクエストであるとき、現在のページを再読み込みします同じ機能が効率を向上させる方法 –

+0

あなたの問題を解決するためにこの作業を行いましたか?私はあなたの問題のコードを書くことはできません。しかし、私はあなたがそれをgoogleするときにJqueryを学ぶチュートリアルがたくさんあると確信しています。ではごきげんよう。 – badiya

+0

はいそれは動作します。ありがとうございます:)しかし、フォームには前に入力したものが含まれます。すべてのフィールドを空にする方法はありますか? –

関連する問題