在 xadmin/filters.py 中添加
- MultiSelectFieldListChoiceFilter
- @manager.register
- class MultiSelectFieldListChoiceFilter(MultiSelectFieldListFilter):
- def choices(self):
- self.lookup_in_val = (type(self.lookup_in_val) in (tuple, list)) and self.lookup_in_val or list(
- self.lookup_in_val)
- yield {
- 'selected': len(self.lookup_in_val) == 0,
- 'query_string': self.query_string({}, [self.lookup_in_name]),
- 'display': _('All'),
- }
- # for val in self.lookup_choices:
- for lookup, val in self.field.flatchoices:
- yield {
- 'selected': smart_text(lookup) in self.lookup_in_val,
- 'query_string': self.query_string({self.lookup_in_name: ",".join([lookup] + self.lookup_in_val), }),
- 'remove_query_string': self.query_string(
- {self.lookup_in_name: ",".join([v for v in self.lookup_in_val if v != val]), }),
- 'display': val,
- }
在 xadmin.py 中
- def get_filter_fields(cls):
- return [(i.attname.replace('_id', ''), MultiSelectFieldListChoiceFilter) if i.choices else i.attname.replace('_id','')
- for i in cls._meta.fields if not i.attname.startswith('_')]
- class TestAdmin:
- list_filter = get_filter_fields(Test)
- xadmin.site.register(Test, TestAdmin)
来源: http://www.bubuko.com/infodetail-3784851.html