2016-08-27 10 views
0

私は3つのジョブを実行します 1)イベントに関連するパッケージを読む 2)そのイベントに関連するパッケージを1つずつ更新します。 3)または、そのイベントに関連する同じパッケージを削除します。Django:テンプレートにevent.id/package.idを渡す方法

@login_required 
def update_package(request, pk): 

    package = Packages.objects.get(pk = pk) 
    event = AddEvent.objects.get(EventId = package.PackageId) 
    if request.method == 'POST': 
     f1 = PackageForm(request.POST, instance = event) 
    if f1.is_valid(): 
     f1.save() 
     return redirect('update_package' , package , event.id) 
    else: 
     f1 = PackageForm(instance = event) 

    return render(request,'addpackage.html', {'form':f1}) 

@login_required 
def delete_package(request, pk): 
    PackageId = Packages.objects.get(pk=pk) 

    if request.method == 'POST' : 
     PackageId.delete() 
     return redirect('read_package' , PackageId) 

    return render(request, 'package_confirm_delete.html',{'object':PackageId}) 

をそして私は

url(r'^update_package/(?P<id>.+)/(?P<pk>.+)$',update_package,name='update_package'), 
url(r'^delete_package/(?P<id>.+)/(?P<pk>.+)$', delete_package, name='delete_package'), 

としての私urls.pyを持っているが、それは私が新しいです。この

Reverse for 'update_package' with arguments '(34,)' and keyword arguments '{}' not found. 1 pattern(s) tried: ['organiser/update_package/(?P<id>.+)/(?P<pk>.+)$'] 

のようなエラーを与える: 私はこのように私のviews.pyを持っていますこのすべてに私はそれを正しくやっているかどうかもわかりません。いくつかの方法を提案してください、私はURLはこの

localhost:8000/organiser/read_package/9 

ようになり、イベント9

localhost:8000/organiser/update_package/9/34 

でパッケージ34を更新したいパッケージを読み取ること 。どんな助けも本当に感謝しています。そして、事前に感謝します。

{% for xyz in object_list %} 
    <a href="{% url 'update_package' xyz.id %}" class="btn btn-primary">Update</a> 
    <a href="{% url 'delete_package' xyz.id %}" class="btn btn-primary">delete</a> 
{% endfor %} 

PSをmodels.update_packageに関連する私のPackage_home.htmlでmodels.read_events

{% for event in object_list %} 
    <a href="{% url 'read_package' event.id %}" class="btn btn-primary">Read Packages</a> 
{% endfor %} 

に関連するマイhome.htmlで

:Djangoのバージョン:あなたが必要とする1.10

答えて

0

update_packagedelete_packageビューにid引数を追加してください。

def update_package(request, id, pk): 
def delete_package(request, id, pk): 

これらの引数は、あなたのURLにあるものと一致する必要があります。

delete_packageビューにエラーがあります。名前だけでなく、実際のURLにリダイレクトする必要があります。use reverse for this削除されたオブジェクトのページにリダイレクトすることはできません。

from django.urls import reverse 


@login_required 
def delete_package(request, id, pk): 
    event = Event.objects.get(id=id) 
    package = Package.objects.get(pk=pk) 

    if request.method == 'POST': 
     package.delete() 
     return redirect(reverse('read_package', args=[event.id])) 

    return render(request, 'package_confirm_delete.html',{'object':PackageId}) 

テンプレート使用中のURLを使用するには、ここでの例です:

<a href="{% url read_package package.id %}">{{ package.name }}</a> 
+0

私は私のurls.py.で同じURLを既に含まれています実際には、私はこのエラーが発生している理由は、 'update_package' URLに '34'の前に値 '9'を入れたいからです。そして、私は本当にEventIdを渡す正確な方法に知られていません。 9の私のupdate_package URL –

+0

私は私の答えを変えました。上記を参照。 – danielcorreia

+0

さて、同じエラーが再び発生しています。私はhome.htmlとpackage_home.htmlも更新しています。私のhome.htmlで私はイベントを読んで、私のpackage_home.htmlでは、私はそのイベントに関連するパッケージを読んでいました。 –

関連する問題