django管理员内联字段选项基于主表单字段值进行过滤

问题描述

我有以下型号:

class Organizations(models.Model):
    name = models.CharField(max_length=30,unique=True)

class Postcodes(models.Model):
    organization = models.ForeignKey(Organizations,on_delete=models.PROTECT)
    postcode = models.PositiveBigIntegerField()

class Agent(models.Model):
    organization = models.ForeignKey(Organizations,on_delete=models.PROTECT)
    name = models.CharField(max_length=50)

class AgentPostcodes(models.Model):
    agent= models.ForeignKey(Agent,on_delete=models.PROTECT)
    postcode = models.ForeignKey(Postcodes,on_delete=models.PROTECT)

而admin.py是

class AgentPostcodesInline(admin.TabularInline):
    model = AgentPostcodes

class AgentAdmin(admin.ModelAdmin):
    list_display = ['organization','name']
    inlines = [AgentPostcodesInline]    

如何仅根据与该组织相关的邮政编码来根据组织过滤内联表单字段。 目前,它会显示所有与代理无关的组织的邮政编码。

解决方法

覆盖TabularInlineInlineModelAdminget_queryset方法,类似于documentation中描述的方法:

ModelAdmin.get_queryset(request)

ModelAdmin的get_queryset方法返回所有的QuerySet 可以由管理站点编辑的模型实例。一个用例 重写此方法是为了显示登录用户拥有的对象:

class MyModelAdmin(admin.ModelAdmin):
    def get_queryset(self,request):
        qs = super().get_queryset(request)
        if request.user.is_superuser:
            return qs
        return qs.filter(author=request.user)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...