Django如何让过滤器仅展示当前登录用户创建的关联数据选项
解决方案
默认情况下django-filter的多对多关联字段会加载对应模型的全部实例作为可选值,所以会出现其他用户创建的Automation选项,你可以通过给过滤器传入当前账户参数,重写过滤器的自动化选项查询集实现需求,修改代码如下:
- 第一步:修改
MessageFilter过滤器类,新增初始化逻辑过滤可选选项
class MessageFilter(django_filters.FilterSet): class Meta: model = Message # 我们要构建过滤器的对应模型 fields = '__all__' exclude = ['account', 'date_created', 'text', 'subject'] def __init__(self, *args, **kwargs): # 提取传入的当前账户参数 account = kwargs.pop('account', None) super().__init__(*args, **kwargs) if account: # 将automations过滤器的可选值限制为当前账户创建的内容 self.filters['automations'].queryset = account.automation_set.all()
- 第二步:修改视图函数,实例化过滤器时传入当前账户
找到视图中过滤器实例化的代码行,修改为:
filter = MessageFilter(request.GET, queryset=messages, account=account)
修改完成后,过滤器的Automation下拉框就只会展示当前登录用户对应账户下创建的内容了。
内容的提问来源于stack exchange,提问作者user8758206
相关产品推荐
相关产品推荐

