托多
django-loose-fk的Python项目详细描述
Version: | 0.4.0 |
---|---|
Source: | https://github.com/maykinmedia/django-loose-fk |
Keywords: | ^{tt1}$, ^{tt2}$, ^{tt3}$, ^{tt4}$ |
PythonVersion: | 3.7 |
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())