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

在Django抽象BaseModel中实现获取子类全部imported_id的方法

实现抽象基类的类级方法返回子类实例字段列表

要让BaseModel的get_all_imported_id方法适配所有子类,只需将其改为类方法,利用类方法的cls参数获取当前调用的子类模型即可:

from django.db import models

class BaseModel(models.Model):
    id = models.AutoField(primary_key=True)
    imported_id = models.CharField(max_length=200, blank=True, null=True)

    class Meta:
        abstract = True

    @classmethod
    def get_all_imported_id(cls):
        # 通过cls获取当前调用的子类,查询其所有实例
        all_objects = cls.objects.all()
        # 提取非空的imported_id组成列表
        return [obj.imported_id for obj in all_objects if obj.imported_id]

class Model_1(BaseModel):
    # 示例子类字段
    name = models.CharField(max_length=100)

class Model_2(BaseModel):
    # 示例子类字段
    value = models.IntegerField()

关键说明:

  • 使用@classmethod装饰器,让方法可以直接通过类调用(如Model_1.get_all_imported_id())
  • cls参数会自动传入当前调用方法的子类(调用Model_1时cls就是Model_1,调用Model_2时就是Model_2)
  • 列表推导式中添加了if obj.imported_id的过滤,避免返回的列表包含空字符串或None值(如果不需要过滤可删除此条件)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 14:36:05