Python 如何扩展Django第三方模型?

Python 如何扩展Django第三方模型?,python,django,python-3.x,django-models,extend,Python,Django,Python 3.x,Django Models,Extend,我使用的是Python 3.7、Django 2.0和Django address==0.2.1模块()。地址模块似乎可以为我的应用程序自动创建迁移和导入模型,这很好。我想创建一个 def get_by_natural_key(self, name): return self.get_or_create(...fields...)[0] AddressField模型的方法(为了简化YAML数据的创建)。是否可以将其添加到AddressField模型中,而不更改作为安装此应用程序的一部分

我使用的是Python 3.7、Django 2.0和Django address==0.2.1模块()。地址模块似乎可以为我的应用程序自动创建迁移和导入模型,这很好。我想创建一个

def get_by_natural_key(self, name):
    return self.get_or_create(...fields...)[0]
AddressField模型的方法(为了简化YAML数据的创建)。是否可以将其添加到AddressField模型中,而不更改作为安装此应用程序的一部分下载的核心文件?为该模型创建的MySQL表是

+
| address_address | CREATE TABLE `address_address` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `street_number` varchar(20) COLLATE utf8_bin NOT NULL,
  `route` varchar(100) COLLATE utf8_bin NOT NULL,
  `raw` varchar(200) COLLATE utf8_bin NOT NULL,
  `formatted` varchar(200) COLLATE utf8_bin NOT NULL,
  `latitude` double DEFAULT NULL,
  `longitude` double DEFAULT NULL,
  `locality_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `address_address_locality_id_5dd79609_fk_address_locality_id` (`locality_id`),
  CONSTRAINT `address_address_locality_id_5dd79609_fk_address_locality_id` FOREIGN KEY (`locality_id`) REFERENCES `address_locality` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin |
+-----------------+-------------------------------------

虽然不确定此表结构与我的问题有多大关系。

首先,我认为您希望在模型的管理器上而不是在模型本身中使用
按自然键获取
函数,以便像
地址.objects.按自然键获取
一样访问它

为了实现这一点,您可以

from django.db import models

class CustomManager(models.Manager):
    def get_by_natural_key(self, name):
        return self.get_or_create(...fields...)[0]

Address.add_to_class('objects', CustomManager())


您正在尝试向模型中添加字段吗?或者只添加一个新方法?如果它只是一个附加方法,那么您正在寻找对模型进行修补的方法:我只希望向现有模型添加一个附加方法。这个猴子补丁看起来很有前途。我试试看。你可以创建一个第三方应用程序模块,定义一个应用程序配置,然后在
ready
函数中连接新方法。