Django Loose FK 处理本地或远程的 "外键" 引用。
项目描述
- 版本:
- 1.1.1
- 来源:
- 关键词:
外键, URL引用, 去中心化, 完整性
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 查看散列)