托多

django-loose-fk的Python项目详细描述


Version:0.4.0
Source:https://github.com/maykinmedia/django-loose-fk
Keywords:^{tt1}$, ^{tt2}$, ^{tt3}$, ^{tt4}$
PythonVersion:3.7

build-statusRequirements statusCoverage status

python-versionsdjango-versionspypi-version

django loose fk处理本地或远程“foreignkey”引用。

在分散的api环境中,不同的提供者可以提供相同类型的 数据,而您自己的api也提供了这一点。django model字段允许 您需要透明地处理这个问题,并提供一个统一的、干净的python api。

1   Features

  • 始终使用django模型实例
  • 用于获取远程对象的可插入接口
  • 自动支持DRF超链接序列化程序和序列化程序字段

2   Installation

2.1   Requirements

  • Python 3.7或更高版本
  • setuptools 30.3.0或更高版本
  • Django 2.0或更新版本

2.2   Install

pip install django-loose-fk

3   Usage

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

fromdjango_loose_fk.fieldsimportFkOrURLFieldclassSomeModel(models.Model):name=models.CharField(max_length=100)classOtherModel(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   Loaders

加载程序是用于加载数据的可插入接口。默认加载程序是 django_loose_fk.loaders.RequestsLoader,这取决于requests 获取数据的库。

您可以使用设置DEFAULT_LOOSE_FK_LOADER

DEFAULT_LOOSE_FK_LOADER="django_loose_fk.loaders.RequestsLoader"

或者根据每个字段覆盖加载程序:

fromdjango_loose_fk.loadersimportRequestsLoaderclassMyModel(models.Model):...relation=FkOrURLField(fk_field="local",url_field="remote",loader=RequestsLoader())

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaGWT:何时使用Lazydemelement?   Java中跟踪消失线程的多线程处理   java Springboot未能配置数据源:“url”,但我没有使用数据库   java为按钮生成随机位置   math Java:包含二项式系数计算的表达式   java通过AsyncTask传递参数   从路径错误创建java文件   高流量网站的性能播放框架、Java、Apache、PostgreSQL、JPA和Hibernate   java将4D矢量转换为长矢量   arraylist Java循环在没有任何错误的情况下终止   java正在制作一个计算器应用程序,希望在第二个片段中更新历史,但无法完成   java将信息从IntentService发送到Activity   java如何在游戏中插入大量实体!工作   javascript如何在ScriptEngineforJava中从数学中获得准确的结果?