Django 和架构 : how to share a "referencial" database between projects?

标签 django database-design geodjango

我今天带着一个有关 Django 的设计/架构问题来。

我在多个网站(托管在同一服务器上)工作,这些网站分别需要地理数据(州、城镇等)。每个项目都包含应用程序,并且每个应用程序可能包含带有城镇或州的 ForeignKey 字段的模型。

为了不重复自己,我不想建立一个数据库来存储这些城镇和州,并通过 Django 项目使用它

Django 提供了一种在同一项目中使用多个数据库的简单方法,在 settings.py 文件中声明它并编写路由器类来保存读写内容。但这样一来,就不可能使用 select_lated 语句,例如:

job = get_object_or_404(Jobs.objects.select_related('state__town'), user=user)

这种行为对我来说很自然(不可能从头开始在数据库之间进行连接)...

我的问题:

  • 考虑引入dblinks是个好主意吗(我不这么认为......),Django可以处理它吗(我没有找到这部分的任何文档)?<
  • 面对这种情况,您会如何处理?

一个快速但肮脏的解决方案是导入每个项目数据库中的所有地理数据(城镇、州...),但它根本不是干的:( :

python manage.py loaddata geo.json

另一个解决方案可能是构建一个单独的“geo”应用程序,它可以将数据“服务”(我不知道如何)到其他项目......实际上,我尝试了GeoDjango,但它似乎真的很复杂,而且可能无法回答我的问题!

提前非常感谢您的回答!

最佳答案

根据此数据的静态程度,最简单的方法可能是在 Python 中定义这些城镇和州一次,然后将此定义导入到所有单独的项目中:

# locations.py
STATES = (('S1', 'State 1'), ('S2', 'State 2'))
TOWNS = (('T1', 'Town 1'), ('T2', 'Town 2'))

然后您可以使用指定选项 kwarg 的 charfield,而不是使用外键:

# app/models.py
from django.db import models
import locations # its on the path somewhere!

class MyModel(models.Model):
    state = models.CharField(max_length=5, options=STATES)
    town = models.CharField(max_length=5, options=TOWNS)

这种方法不太容易更新,并且它不记录城镇和州之间的关系(即一个城镇位于一个州),但它非常简单。

关于Django 和架构 : how to share a "referencial" database between projects?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6115730/

相关文章:

python - Django url 不带参数

javascript - Django 表单 : disabling submit button and re-enabling when done

python - 具有 postgres 引用约束的 Django Arrayfield

django - geodjango 两个模型中点之间的距离

python - 在 GeoDjango 中导入空间数据时出错 - mpoly 字段的 KeyError

django - 制作 : *** [port-target] Error 2 When trying to install GDAL for GeoDjango using Ubuntu 18. 04

python - Django Shell 图片上传_io.BufferedReader 无属性大小

MySQL 多表还是海量表?

mysql - 查询为新项目创建数据库

MYSQL数据库结构与设计