2016-05-15 17 views
0
def group_display(request, group_id): 
    groups = Groups.objects.get(id=group_id) 
    username = UserInfo.objects.get(owner = request.user) 
    form = membership_form() 
    template = 'groups.html' 


    if request.method == 'POST': 
     form = membership_form(request.POST) 
     if form.is_valid(): 
      post = form.save(commit=False) 
      post.name = username 
      post.group = groups 
      post.save() 

    context = { 
       'form':form, 
       } 
    return render(request, template, context) 

問題は、ページをリロードするたびに、新しい行がメンバーシップモデルに追加されることです。ページがrequest.POSTとしてロードされているようです。私はボタンをクリックするだけでデータを挿入することができる方法はありますか?Djangoデータベースがページロード時に更新されます

答えて

1

あなたが行うことができる2つの事があります。

  1. リダイレクトは成功したPOSTの後。

  2. そのユーザーの登録がないことを確認してください。ここで

は、両方の世話をする図である。

from django.shortcuts import get_object_or_404, redirect 

def group_display(request, group_id): 
    groups = get_object_or_404(Groups, id=group_id) 
    username = get_object_or_404(UserInfo, owner=request.user) 

    if username.membership_set.exists(): 
     # This user is already enrolled 
     return redirect('/') 

    form = membership_form(request.POST or {}) 
    template = 'groups.html' 
    context = {'form': form} 

    if form.is_valid(): 
     post = form.save(commit=False) 
     post.name = username 
     post.group = groups 
     post.save() 

     return redirect('/') 

    return render(request, template, context) 

あなたがあなた自身のモデルに基づいusername.membership_set.existsを調整する必要があります。

+0

ありがとうございました。 – Enam

2

POSTリクエストが成功した後は、リダイレクトを返すことをお勧めします。これにより、ページがリフレッシュされた場合に、ポストリクエストが再度処理されることが防止されます。必要に応じて、現在のURLにリダイレクトすることができます。

from django.shortcuts import redirect 

def group_display(request, group_id): 
    ... 
    if request.method == 'POST': 
     form = membership_form(request.POST) 
     if form.is_valid(): 
      post = form.save(commit=False) 
      post.name = username 
      post.group = groups 
      post.save() 
      return redirect('/success-url/') 
    ... 
+0

ありがとうございます。 – Enam

関連する問題