Django查看列表(顺序和分页)和删除功能?

时间:2014-04-12 20:36:23

标签: django

我有一个html模板,我列出了用户Django模型对象。此页面还有一个分页和链接来订购对象。现在我想在每个对象上放一个删除按钮,它会从列表和数据库中删除它而不会破坏顺序或分页(返回当前没有删除对象的查询集)。

我尝试使用自己的url删除视图,但我认为最好将它全部放在同一个视图中,以便能够返回/处理order_by和分页。像我的分页链接那样加载href,如:

“mylist /?page = {{results.next_page_number}}& order_by = {{order_by}}”

但是有一个额外的delete-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))

2 个答案:

答案 0 :(得分:1)

以下是我将如何做到这一点:

  1. 发出对django视图的ajax调用以删除url上的条目,例如/ entery / 3 / delete,
  2. 该视图将检查验证,执行删除并返回简单的成功/失败 旗帜(也许在json左右),
  3. 在客户端,执行-on success-一个java脚本来隐藏当前页面中的条目。 (即设置样式:显示为无或删除HTML元素)。
  4. 通过这种方式,我可以获得快速响应,减少不需要的网络流量,提供更好的用户体验和更高的安全性。

    希望这有帮助。

答案 1 :(得分: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>