跳转到主要内容

Django Loose FK 处理本地或远程的 "外键" 引用。

项目描述

版本:
1.1.1
来源:

https://github.com/maykinmedia/django-loose-fk

关键词:

外键, URL引用, 去中心化, 完整性

Build status Code quality checks black Coverage status

python-versions django-versions pypi-version

Django Loose FK 处理本地或远程的“外键”引用。

在去中心化的API环境中,不同的提供商可以提供相同类型的数据,而您的API也提供此类数据。Django模型字段允许您透明地处理,并呈现统一的、干净的Python API。

1 功能

  • 始终使用Django模型实例进行操作

  • 自动添加检查约束

  • 可插拔的接口用于获取远程对象

  • 自动支持DRF Hyperlinked序列化器和序列化器字段

2 安装

2.1 需求

  • Python 3.10或更高版本

  • setuptools 30.3.0或更高版本

  • Django 3.2或更高版本

2.2 安装

pip install django-loose-fk

3 使用

核心是一个(虚拟的)Django模型字段。

from django_loose_fk.fields import FkOrURLField

class SomeModel(models.Model):
    name = models.CharField(max_length=100)


class OtherModel(models.Model):
    local = models.ForeignKey(SomeModel, on_delete=models.CASCADE, blank=True, null=True)
    remote = models.URLField(blank=True)
    relation = FkOrURLField(fk_field="local", url_field="remote")

您现在可以使用本地实例或URL创建对象

some_local = SomeModel.objects.get()
OtherModel.objects.create(relation=some_local)

OtherModel.objects.create(relation="https://example.com/remote.json")

访问属性始终返回一个实例

>>> other = OtherModel.objects.get(id=1)  # local FK
>>> other.relation
<SomeModel (pk: 1)>

>>> other = OtherModel.objects.get(id=2)  # remote URL
>>> other.relation
<SomeModel (pk: None)>

在远程URL的情况下,将获取URL,并将JSON响应用作模型实例的init kwargs。对于远程实例,.save()方法被阻止,以防止错误。

3.1 加载器

加载器是用于加载数据的可插拔接口。默认加载器是 django_loose_fk.loaders.RequestsLoader,它依赖于 requests 库来获取数据。

您可以使用设置 DEFAULT_LOOSE_FK_LOADER 指定全局默认加载器

DEFAULT_LOOSE_FK_LOADER = "django_loose_fk.loaders.RequestsLoader"

或根据字段覆盖加载器

from django_loose_fk.loaders import RequestsLoader

class MyModel(models.Model):
    ...

    relation = FkOrURLField(
        fk_field="local",
        url_field="remote",
        loader=RequestsLoader()
    )

3.2 本地和远程URL

如果同一域内托管了多个服务,区分本地和远程URL可能会很复杂。在这种情况下,可以使用额外的设置 LOOSE_FK_LOCAL_BASE_URLS 来定义本地URL的允许前缀的显式列表。

LOOSE_FK_LOCAL_BASE_URLS = [
    "https://api.example.nl/ozgv-t/zaken/",
    "https://api.example.nl/ozgv-t/catalogi/",
]

项目详情


下载文件

为您的平台下载文件。如果您不确定选择哪个,请了解有关 安装包 的更多信息。

源分布

django_loose_fk-1.1.1.tar.gz (28.8 kB 查看散列)

上传时间

构建分布

django_loose_fk-1.1.1-py3-none-any.whl (37.3 kB 查看散列)

上传于 Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面