Python Django:使用模板删除模型对象

Python Django:使用模板删除模型对象,python,django,django-models,django-forms,django-templates,Python,Django,Django Models,Django Forms,Django Templates,我目前正在使用模型让用户输入数据,使用模板(而不是管理员)然后存储,在这一点上,用户可以看到他们输入的所有数据。我还想让用户能够删除特定的条目,这将通过使用对象ID来识别和删除特定的对象来完成 以下是我的视图.py: @login_required(login_url='/login/') def fav(request): context = RequestContext(request) #This returns all of the data the user has

我目前正在使用模型让用户输入数据,使用模板(而不是管理员)然后存储,在这一点上,用户可以看到他们输入的所有数据。我还想让用户能够删除特定的条目,这将通过使用对象ID来识别和删除特定的对象来完成

以下是我的视图.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)
这是我的URL.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')
url(r'^favorites/$,views.fav,name='favorites'),
url(r“^add\u favorites/$”,views.add\u fav,name='add favorites'),
url(r'^delete/(?P\d+/$),views.delete,name='delete')
这是我的模板文件中负责删除的部分

{% for id in stock_id %}
    <div align="right"><a href="/delete/{{id}}">Delete</a></div>
{% endfor %}
{库存id的%u\id%}
{%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
另外,在删除方法中,查看用户是否具有删除对象的权限。如果没有,任何人都可以用一些随机id点击这个url并开始删除数据库中的对象

我将首先添加所需的
login\u
decorator,然后添加由
创建的
或附加与模型关联的
组,这需要在允许用户删除对象之前进行验证

编辑

{收藏列表%中fav的%
{{fav.name}
{%endfor%}
现在您可以删除id列表

您的问题在于:

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
另外,在删除方法中,查看用户是否具有删除对象的权限。如果没有,任何人都可以用一些随机id点击这个url并开始删除数据库中的对象

我将首先添加所需的
login\u
decorator,然后添加由
创建的
或附加与模型关联的
组,这需要在允许用户删除对象之前进行验证

编辑

{收藏列表%中fav的%
{{fav.name}
{%endfor%}
现在您可以删除id列表

您的问题在于:

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
另外,在删除方法中,查看用户是否具有删除对象的权限。如果没有,任何人都可以用一些随机id点击这个url并开始删除数据库中的对象

我将首先添加所需的
login\u
decorator,然后添加由
创建的
或附加与模型关联的
组,这需要在允许用户删除对象之前进行验证

编辑

{收藏列表%中fav的%
{{fav.name}
{%endfor%}
现在您可以删除id列表

您的问题在于:

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
另外,在删除方法中,查看用户是否具有删除对象的权限。如果没有,任何人都可以用一些随机id点击这个url并开始删除数据库中的对象

我将首先添加所需的
login\u
decorator,然后添加由
创建的
或附加与模型关联的
组,这需要在允许用户删除对象之前进行验证

编辑

{收藏列表%中fav的%
{{fav.name}
{%endfor%}


现在您可以删除id列表

谢谢,将列表放在“收藏夹中的对象列表”之前起作用。但是,现在我得到了多个删除链接。每个ID对应一个。正确,这就是模板代码所做的。。看到带有
a
标记的for循环了吗?啊,是的,我看到了。但是,当我在模板中取出'for'循环并尝试传递{{stock_id}}时,delete链接将所有id都放在它和括号中,例如:“/delete/[11,12]”有什么方法可以解决这个问题吗?你想如何解决它?有没有方法只显示与每个模型对象相对应的id而不是所有id谢谢,将列表放在“收藏夹中的对象列表”之前起作用。但是,现在我得到了多个删除链接。每个ID对应一个。正确,这就是模板代码所做的。。看到带有
a
标记的for循环了吗?啊,是的,我看到了。但是,当我在模板中取出'for'循环并尝试传递{{stock_id}}时,delete链接将所有id都放在它和括号中,例如:“/delete/[11,12]”有什么方法可以解决这个问题吗?你想如何解决它?有没有方法只显示与每个模型对象相对应的id而不是所有id谢谢,将列表放在“收藏夹中的对象列表”之前起作用。但是,现在我得到了多个删除链接。每个ID对应一个。正确,这就是模板代码所做的。。看到带有
a
标记的for循环了吗?啊,是的,我看到了。但是,当我在模板中取出'for'循环并尝试传递{{stock_id}}时,delete链接将所有id都放在它和括号中,例如:“/delete/[11,12]”有什么方法可以解决这个问题吗?你想如何解决它?有没有方法只显示与每个模型对象相对应的id而不是所有id谢谢,将列表放在“收藏夹中的对象列表”之前起作用。但是,现在我得到了多个删除链接。每个ID对应一个。正确,这就是模板代码所做的。。请参阅带有
a
标记的for循环