例如,如果我有3个如下所示的模型:

class CallLog(models.Model):
    lead_id = models.BigIntegerField("Lead ID")
    #  other fields


class EmailLog(models.Model):
    lead_id = models.BigIntegerField("Lead ID")
    #  other fields


class TextLog(models.Model):
    lead_id = models.BigIntegerField("Lead ID")
    #  other fields

我是要 for each 模型单独添加lead_id个,还是有办法只键入一次?

推荐答案

是的,您可以定义abstract base class [Django-doc]:

class LeadIdModel(models.Model):
    lead_id = models.BigIntegerField("Lead ID")

    class Meta:
        abstract = True

然后在其他模型中继承:

class CallLog(LeadIdModel, models.Model):
    # other fields…


class EmailLog(LeadIdModel, models.Model):
    # other fields…


class TextLog(LeadIdModel, models.Model):
    # other fields…

您可以定义多个这样的抽象基类,并使用多重继承,以便模型从多个这样的类继承.

Django相关问答推荐

测试DRF中需要授权头

我的Django终结点不访问HAS_OBJECT_PERMISSION方法

Django REST框架中如何从另一个视图调用API视图?

Django 关系嵌套related_name

root urls.py 是 Django 中的 config/urls.py 吗?

是否可以在 Django 中重命名应用程序的组名?

使用 Python/Django 上传大文件

在 PyCharm 中运行 Django 测试

Django - 强制执行 ManyToManyField 唯一项

在生产中使用 Django 中的 SQLite?

Django - 如何从模型中 Select 特定列?

使用 scrapy 访问 Django 模型:定义 Django 元素的路径

django类型对象Http404没有属性get

使用 Python / Django 的 Google API 示例的 Oauth

ImportError:升级到 Django 4.0 后无法从 'django.conf.urls' 导入名称 'url'

django 在 unittest 测试中设置环境变量

UpdateView 中的success_url,基于传递的值

为什么我的 Django 单元测试不知道安装了 MessageMiddleware?

Django - TypeError - save() 得到了一个意外的关键字参数force_insert

AttributeError:ManyRelatedManager对象没有add属性?