使用Django ModelMultipleChoiceFilter遇参数错误:__init__需至少2参数(传入3个)
解决
__init__() takes at least 2 arguments (3 given)错误 嘿,这个坑我之前也踩过!你的问题根源很明确——没有给ModelMultipleChoiceFilter传入必填的queryset参数。
在django-filter的逻辑里,ModelMultipleChoiceFilter需要明确知道要从哪个模型的查询集中加载可选选项,所以初始化时必须提供queryset参数,否则就会触发这个参数不足的报错。
修正后的代码示例
class MyFilter(FilterSet): transcribe_by = django_filters.ModelMultipleChoiceFilter( field_name='transcribe_by', # 注意:新版本django-filter推荐用field_name替代旧的name参数 label='Transcribed By', queryset=User.objects.all() # 替换成你实际关联的模型查询集,比如Transcriber.objects.all() )
额外提示
- 如果你用的是较新的django-filter版本,
name参数已经被标记为过时,建议改用field_name来指定关联的模型字段,避免后续版本的兼容性问题。 - 一定要把
queryset的值换成你业务中对应的模型查询集——比如如果transcribe_by关联的是自定义的Transcriber模型,就写成Transcriber.objects.all(),也可以根据需求添加过滤条件(比如Transcriber.objects.filter(is_active=True))。
内容的提问来源于stack exchange,提问作者Babken Vardanyan
相关产品推荐
相关产品推荐

