2014-04-12 46 views
0

我有一个html模板,我列出用户Django模型对象。此页面还有一个分页和链接来排列对象。现在我正在考虑在每个对象上放置一个删除按钮,这会从列表和数据库中删除它,而不会破坏顺序或分页(返回当前没有删除对象的查询集)。Django视图与列表(订单和分页)和删除功能?

我试过用它自己的url进行删除视图,但我认为最好的做法是把它全部放在同一视图中,以便能够返回/处理order_by和分页。像我的分页链接加载一个href的:

“MYLIST /页= {{results.next_page_number}} & ORDER_BY = {{ORDER_BY}}?”

但具有更多的删除,someID参数(什么是首选方法?)。我不确定这是干净的(和安全的)方式来做到这一点?我正在考虑检查对象用户对登录的用户也。

deleteid = get_object_or_404(Mymodel, pk=?) #what to do here? 
if deleteid.user == request.user: 
    deleteid.delete() 

我在想这里吗?我需要一些指导将所有这些放在一起。

查看:

def Mylist(request): 

    order_by = request.GET.get('order_by', 'somedefault') 
    myobjects_list = Mymodel.objects.filter(user=request.user).order_by(order_by) 
    paginator = Paginator(myobjects_list, 5) 

    page = request.GET.get('page') 
    try: 
     results = paginator.page(page) 
    except PageNotAnInteger: 
     results = paginator.page(1) 
    except EmptyPage: 
     results = paginator.page(paginator.num_pages) 

    context = {'results ': results, 'order_by': order_by } 
    return render_to_response('mylist.html', context, context_instance=RequestContext(request)) 
+0

您正在创建一个查询字符串,您可以通过在request.MET引用键让您的视图中的值['QUERY_STRING']你可以尝试使用login_required修饰器来确保用户已经登录。我只是不会这样做。 –

+0

谢谢。是的,我不想在整个视图中使用login_required装饰器,所以我可以使用列表函数而不使用其他模板中的删除选项。您如何看待下面答案中的解决方案(由radev)?这更像是你会做的事吗? – user3199840

+0

我就是这么做的。您可以将对象的id作为列出的每个项目的id应用,并在ajax响应时使用javascript将其删除。 –

回答

1

下面是我会做:

  1. 问题一个AJAX调用一个Django视图中删除像一个URL进入/ entery/3 /删除,
  2. 这种看法会检查验证,执行删除,并返回一个简单的成功/失败 标志(也许在JSON左右),
  3. 在客户端,执行-on成功 - AJ ava脚本从当前页面隐藏该条目。 (即设置样式:显示为无或删除HTML元素)。

这样我就可以获得快速响应,减少不需要的网络流量,提供更好的用户体验和更高的安全性。

希望这会有所帮助。

+0

很酷。谢谢,这是一个非常有用和有趣的解决方案!我会尝试一些与此(我没有与JavaScript的好,但也许我可以完全用jQuery完成它?) – user3199840

+0

完全与jquery ..当然! :-) –

+0

我应该从删除视图返回什么内容。我的意思是“标志”..一个变量,一个布尔值,ID?不知道如何识别div来隐藏/删除成功。再次感谢 – user3199840

1
在我views.py

def ProjectDetail(request,pk): 
    context = {} 
    template = 'views/projectdetail.html' 
    project = '' 
    prev = Project.objects.filter(pk__lt=pk).order_by('-pk')[:1] 
    next = Project.objects.filter(pk__gt=pk).order_by('pk')[:1] 
try: 
    print(prev[0].pk) 
    print(next[0].pk) 
except: 
    pass 
project = Project.objects.filter(pk=pk) 
context['categories'] = ProjectCategory.objects.all() 
paginator = Paginator(project, 1) # Show 25 contacts per page 

page = request.GET.get('page') 
try: 
    data = paginator.page(page) 
except PageNotAnInteger: 
    # If page is not an integer, deliver first page. 
    data = paginator.page(1) 
except EmptyPage: 
    # If page is out of range (e.g. 9999), deliver last page of results. 
    data = paginator.page(paginator.num_pages) 
if prev: 
    context['prev'] = prev[0].pk 
if next: 
    context['next'] = next[0].pk 
context['data'] = data 
return render_to_response(template, context, context_instance=RequestContext(request)) 
在我的模板

我有

<div class="row"> 
     <a {% if next %} href="{% url 'task:project-detail' next %}" class="btn btn-primary pull-right" {% else %} class="btn btn-primary pull-right disabled" {% endif %}>Next</a> 



    <a {% if prev %} href="{% url 'task:project-detail' prev %}" class="btn btn-primary pull-left" {% else %} class="btn btn-primary pull-left disabled" {% endif %} >Previous</a> 

    </div> 
相关问题