You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django-filter如何让下拉框仅展示当前管理员关联的代理人选项

解决方案

第一步:修正models.py笔误

你现有代码中SubManager模型的外键字段指向了不存在的Capo类,需要先修正为指向Manager,否则关联逻辑会报错:

class SubManager(StandardProfile):
    user = models.OneToOneField(User, null=True, on_delete=models.CASCADE)
    # 原错误代码:manager = models.ForeignKey(Capo, null=True, on_delete = models.SET_NULL)
    # 修正后
    manager = models.ForeignKey(Manager, null=True, on_delete = models.SET_NULL)

第二步:修改filters.py重写FilterSet初始化方法

你的思路是正确的,只需要在MembershipCardFilter的__init__方法中拿到传入的user参数,过滤下拉框的可选范围即可:

import django_filters
from .models import MembershipCard, Agent, SubManager

class MembershipCardFilter(django_filters.FilterSet):
    class Meta:
        model = MembershipCard
        fields = ['agent','agent__subManager']
        exclude = ['creation_date']

    def __init__(self, *args, **kwargs):
        # 取出传入的user参数,弹出避免传给父类报错
        user = kwargs.pop('user', None)
        super().__init__(*args, **kwargs)
        if user:
            # 获取当前user对应的manager实例
            manager = user.manager
            # 过滤agent下拉框:仅显示当前manager关联的agent
            self.filters['agent'].queryset = Agent.objects.filter(manager=manager)
            # 过滤subManager下拉框:仅显示当前manager关联的subManager
            self.filters['agent__subManager'].queryset = SubManager.objects.filter(manager=manager)

验证说明

你现有视图中已经在初始化过滤器时传入了user=user参数,不需要额外修改视图代码。修改完成后过滤器下拉框就只会显示当前登录Manager关联的Agent和SubManager,不会展示全量数据库数据。

内容的提问来源于stack exchange,提问作者manuersuper

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 15:15:06