python - 如何扩展 Django 第三方模型?
问题描述
我正在使用 Python 3.7、Django 2.0 和 django-address==0.2.1 模块(https://pypi.org/project/django-address/)。地址模块似乎为我的应用程序自动创建迁移和导入模型,这很好。我想创建一个
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 |
+-----------------+-------------------------------------
虽然不确定这个表结构与我的问题有多相关。
解决方案
首先,我认为你想get_by_natural_key
在模型的管理器上运行,而不是在模型本身上运行,这样它就可以像Address.objects.get_by_natural_key
.
为了实现这一点,你可以做
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())
推荐阅读
- sql - 如何仅显示列中的值并忽略 Access 查询中的空白单元格?
- laravel - 找不到类pdo ubuntu 20.04
- java - 如何通过让用户按下按钮来创建多个 GObject
- jenkins - Jenkins Pipeline 期望变量和循环的一个步骤
- python - 使用列表理解的输出不同于使用 for 循环的输出
- python - 如何修复不起作用的 Python Try/Except 语句
- python - 无法让 jupyter notebook 为 python 3.8 工作
- javascript - 获取值不在数组中的 Firestore 文档
- regex - sed 命令在特定模式后打印字符串
- excel - 使用 vba 创建数据透视表时出现运行时错误 5