更改 django 中管理视图的逻辑

问题描述 投票:0回答:1

我正在用纯 django 创建一个网站,其中有以下模型。

class GoodsDetails(models.Model):
    serial_number = models.CharField(max_length=100)
    goods_description = models.CharField(max_length=100)
    quantity = models.CharField(max_length=100)
    gross_weight = models.CharField(max_length=100)
    is_active = models.BooleanField()

    def __str__(self):
        return f"{self.serial_number}"

我已在管理中注册了模型,我想向超级用户显示所有模型实例,但对于非超级用户,我想仅显示那些

is_active = False
的实例。如何在 django 管理中实现这一点?

我对此进行了研究,并认为我应该为这项工作创建自定义权限。但是,我认为修改管理视图逻辑会更好,因为在这种情况下,稍微更改 ORM 查询就可以完成工作。也欢迎任何其他方法。

感谢您的建议和/或解决方案:)

python django django-admin
1个回答
0
投票

admin.py
添加

from django.contrib import admin
from .models import GoodsDetails

@admin.register(GoodsDetails)
class GoodsDetailsAdmin(admin.ModelAdmin):
    list_display = ('id', 'serial_number', 'goods_description', 'quantity', 'gross_weight', 'is_active')

    def get_queryset(self, request):
        qs = super().get_queryset(request)
        if request.user.is_superuser:
            return qs
        else:
            return qs.filter(is_active=False)
© www.soinside.com 2019 - 2024. All rights reserved.