簡體   English   中英

Django:使用模板刪除模型對象

[英]Django: Delete model object using template

我當前正在使用模型來讓用戶使用隨后存儲的模板(不是admin)輸入數據,此時用戶可以看到他們輸入的所有數據。 我還希望為用戶提供刪除特定條目的功能,這可以通過使用對象ID來識別和刪除特定對象來完成。

這是我的views.py:

@login_required(login_url='/login/')
def fav(request):
    context = RequestContext(request)

    #This returns all of the data the user has entered
    favorites_list = StockTickerSymbol.objects.filter(user=request.user).order_by('-added_date')
`
    #This is to try to get the ID of every object in favorites_list and append it to a list
    for obj in favorites_list:
        stock_id = []
        stock_id.append(obj.id)

    #Here is where the form is processed to save the data the user has entered
    if request.method == 'POST':
        form = FavoritesForm(request.POST)
        if form.is_valid(): 
            stock = form.save(commit=False)
            stock.user = request.user
            stock.save()
            return redirect(fav)    
        else:   
            print form.errors
    else: 
        form = FavoritesForm()

    context_dict = {'favorites': favorites_list, 'form':form, 'stock_id':stock_id}
    return render_to_response('favorites/favorites.html', context_dict, context)

def delete(request, id):
    stock_to_delete = get_object_or_404(StockTickerSymbol, pk=id).delete()
    return redirect(fav)

這是我的urls.py:

url(r'^favorites/$', views.fav, name='favorites'),
url(r'^add_favorites/$', views.add_fav, name='add favorites'),
url(r'^delete/(?P<id>\d+)/$', views.delete, name='delete')

這是我的模板文件中負責刪除的部分

{% for id in stock_id %}
    <div align="right"><a href="/delete/{{id}}">Delete</a></div>
{% endfor %}

我的這段代碼的問題是,模板中的刪除鏈接僅給出所有鏈接的第一個對象ID。 例如,如果有三個提交給用戶,並且id是1,2,3。 對於所有提交,刪除鏈接都將顯示為“ / delete / 1”,因此僅允許用戶刪除其第一個提交。 關於如何解決這個問題的任何想法嗎?

您的問題在這里:

for obj in favorites_list:
    stock_id = []
    stock_id.append(obj.id)

您正在循環內重新初始化。

嘗試這個

stock_id = []
for obj in favorites_list:
    stock_id.append(obj.id)

請注意,您還可以執行以下操作:

favorites_list = StockTickerSymbol.objects.filter(user=request.user).order_by('-added_date')
stock_ids = list(facorites_list.values_list('id', flat=True)) #IMO - It is a good idea to name a list with plural for readability

另外,在您的delete方法中-查看用戶是否確實具有刪除對象的權限。 否則,任何人都可以使用一些隨機ID來訪問該URL,然后開始刪除數據庫中的對象。

我首先要添加login_required裝飾器,然后添加created_by或附加與模型關聯的group ,在允許用戶刪除對象之前需要進行驗證。

編輯

{% for fav in favorite_list %}
    <div class="fav">
         {{fav.name}}
    </div>
    <a href="/delete/{{fav.id}}">Delete me</a>
{% endfor %}

現在,您可以刪除ID列表。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM