首页 > 解决方案 > Django自定义视图“您没有权限错误”

问题描述

我为 Django 管理员创建了自己的视图。在这里,我想添加一个订单链接以查看订单,而不会像这样干扰 change_form。 在此处输入图像描述

我在 admin.py 中添加了以下代码。

 def get_urls(self):
    urls = super(OrderAdmin, self).get_urls()
    custom_urls = [
        path('order/<int:order_id>/view', self.view_order, name="view_order")
    ]
    print(urls)
    return urls + custom_urls

def view_order(self, request, order_id):
    order = Order.objects.get(pk=order_id)
    return render(request, 'shop/order.html', {'order':order})

现在,当我单击链接时,会出现以下屏幕。

在此处输入图像描述

有什么问题 ?如何让原始仪表板保留我所做的?

标签: djangodjango-admin

解决方案


您可以拥有具有所需权限的自定义装饰器。

例如,如果您查看应该对登录用户可用的一个:

from rest_framework.permissions import IsAuthenticated

@permission_classes((IsAuthenticated, ))
def view_order(self, request, order_id):
    order = Order.objects.get(pk=order_id)
    return render(request, 'shop/order.html', {'order':order})

如果您可供任何人使用,您可以使用AllowAny

from rest_framework.permissions import AllowAny

@permission_classes((AllowAny, ))
def view_order(self, request, order_id):
    order = Order.objects.get(pk=order_id)
    return render(request, 'shop/order.html', {'order':order})

此外,您可以将视图编写为类并重新加载def has_change_permission(self, request, obj=None):方法


推荐阅读