我有一个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))
答案 0 :(得分:1)
以下是我将如何做到这一点:
通过这种方式,我可以获得快速响应,减少不需要的网络流量,提供更好的用户体验和更高的安全性。
希望这有帮助。
答案 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>