Django和Architecture:如何在项目之间共享“参考”数据库?

| 我今天提出了有关Django的设计/架构问题。 我在多个网站(托管在同一台服务器上)上工作,这些网站分别需要地理数据(州,城镇等)。每个项目都包含应用程序,并且每个应用程序都可能包含带有“ 0”字段的城镇或州模型。 为了不重复我自己,我不想建立一个数据库来存储这些城镇和州,并通过Django项目使用它。 Django提供了一种在同一个项目中使用多个数据库的简单方法,在
settings.py
文件中声明它,并编写routers类来保存读写内容。但是那样,不可能使用
select_related
语句:
job = get_object_or_404(Jobs.objects.select_related(\'state__town\'), user=user)
这种行为对我来说是自然的(不可能从头开始在数据库之间进行联接)... 我的问题: 考虑引入dblinks是一个好主意(我认为不是),并且Django可以处理它(我没有找到这部分的任何文档)吗? 面对这种情况,您将如何进行? 一种快速而又肮脏的解决方案是将每个项目数据库中的所有地理数据(镇,州...)导入,但根本不是DRY :(:
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)
这种方法不是很容易更新,并且它没有记录镇与州之间的关系(即,一个镇在一个州中),但是非常简单。     
您可以创建数据库视图以从其他数据库引入静态数据。然后,您的模型可以指向该数据库视图。您甚至可以在数据库视图中创建联接。     

要回复问题请先登录注册