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

如何在Mixin中获取视图传入的AuxiliarClass类属性

问题

我定义了一个带有extra_fields属性的AuxiliarClass,并将它作为extra_fields_class属性传入视图TurmaListCreateView。该视图继承了MytMixin,我需要在Mixin的get_queryset方法中访问AuxiliarClass的extra_fields数组及其内部值。尝试打印self.extra_fields_class.__dict__.keys()但无法获取到该数组,请问该如何实现?

原代码如下:

class AuxiliarClass:
    extra_fields=[{"key": "value"}]


class TurmaListCreateView(MytMixin, generics.CreateAPIView):
    model=MyModel
    serializer_class = MyModelSerializer  
    extra_fields_class=AuxiliarClass

class MytMixin():
     extra_fields_class=None
     
     def get_queryset(self):
        print("需要在这里访问extra_fields数组及其内部值")

尝试过的无效代码:

class MytMixin():
     extra_fields_class=None
     
     def get_queryset(self):
        print(self.extra_fields_class.__dict__.keys())
解决方法

你不能直接通过__dict__.keys()获取类属性,类属性的正确访问方式是直接通过类名调用,或者用getattr做安全处理。

方法一:直接访问类属性

extra_fields是AuxiliarClass的类属性,直接通过self.extra_fields_class.extra_fields就能获取到:

class MytMixin():
     extra_fields_class=None
     
     def get_queryset(self):
        # 先判断extra_fields_class是否已赋值
        if self.extra_fields_class:
            # 获取整个extra_fields数组
            print(self.extra_fields_class.extra_fields)
            # 遍历数组,取出内部值
            for field in self.extra_fields_class.extra_fields:
                print(f"数组内的key值:{field['key']}")
        # 别忘了调用父类的get_queryset方法
        return super().get_queryset()

方法二:用getattr做安全访问

如果担心extra_fields_class可能没有extra_fields属性,用getattr可以设置默认值,避免报错:

class MytMixin():
     extra_fields_class=None
     
     def get_queryset(self):
        # 第二个参数是要获取的属性名,第三个是默认值
        extra_fields = getattr(self.extra_fields_class, 'extra_fields', [])
        print(extra_fields)
        for field in extra_fields:
            print(field['key'])
        return super().get_queryset()

为什么之前的代码无效?

self.extra_fields_class.__dict__.keys()虽然能获取类的属性键,但输出的是所有类属性的键列表,而且这种方式不规范。直接通过类名访问类属性才是Python中获取类属性的标准方式,既简洁又可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 17:42:42