xadmin 自定義過濾器選項


默認過濾器會把所有的店鋪都顯示出來,如果店鋪很多篩選會很不方便。我希望可以根據每個用戶的權限不同來顯示他們店鋪

1.找到過濾器源碼修改

地址:xadmin/filters.py

# 這是ForeignKey過濾字段的處理類,其他字段可能不是這個類
@manager.register
class RelatedFieldListFilter(ListFieldFilter):

    @classmethod
    def test(cls, field, request, params, model, admin_view, field_path):
        return is_related_field2(field)

    def __init__(self, field, request, params, model, model_admin, field_path):
        other_model = get_model_from_relation(field)
        if hasattr(field, 'remote_field'):
            rel_name = field.remote_field.get_related_field().name
        else:
            rel_name = other_model._meta.pk.name

        self.lookup_formats = {'in': '%%s__%s__in' % rel_name, 'exact': '%%s__%s__exact' %
                                                                        rel_name, 'isnull': '%s__isnull'}
        # 添加這一段代碼
        if hasattr(model_admin,'{field}_choices'.format(field=field.name)):
            self.lookup_choices = getattr(model_admin,'{field}_choices'.format(field=field.name))(field, request, params, model, model_admin, field_path)
        else:
            self.lookup_choices = field.get_choices(include_blank=False)
        # 添加結束
        super(RelatedFieldListFilter, self).__init__(
            field, request, params, model, model_admin, field_path)

        if hasattr(field, 'verbose_name'):
            self.lookup_title = field.verbose_name
        else:
            self.lookup_title = other_model._meta.verbose_name
        self.title = self.lookup_title

2.在ModelAdmin中添加方法

    def store_choices(self, field, request, params, model, model_admin, field_path):
        
        # 如果是超級用戶不做控制
        if self.request.user.is_superuser:
            return field.get_choices(include_blank=False)

        # 這里就是自己寫條件,從數據庫中查詢出需要顯示的店鋪
        store_lst = self.get_query_set(model.objects).values('store__title').distinct().order_by('store__title')
        # 返回格式 [('pk','標題'),]
        return list(((store.get('store__title'), store.get('store__title')) for store in store_lst))

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM