Django与建筑:如何共享一个;参考的;项目之间的数据库?

Django与建筑:如何共享一个;参考的;项目之间的数据库?,django,database-design,geodjango,Django,Database Design,Geodjango,今天我来问一个关于Django的设计/架构问题 我在几个网站上工作(托管在同一台服务器上),这些网站分别需要地理数据(州、镇等)。每个项目都包含应用程序,每个应用程序都可能包含带有城镇或州的ForeignKey字段的模型 为了不重复我自己,我不想建立一个数据库来存储这些城镇和州,并通过Django项目使用它 Django提供了一种在同一个项目中使用多个数据库的简单方法,在settings.py文件中声明数据库,并编写路由器类来保存读写内容。但这样,就不可能使用select\u相关的语句,如: j

今天我来问一个关于Django的设计/架构问题

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

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

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

job = get_object_or_404(Jobs.objects.select_related('state__town'), user=user)
这种行为对我来说是很自然的(不可能从零开始在数据库之间建立连接)

我的问题是:

  • 考虑引入<强> dBLink > <强>是一个好主意(我不这么认为……),Django能处理吗?(我没有找到这个部分的任何文档)?
  • 面对这种情况,你将如何继续
一个快速而肮脏的解决方案是导入每个项目数据库中的所有地理数据(城镇、州…),但它一点也不枯燥:(:

另一个解决方案可能是构建一个独立的“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)

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

您可以创建一个数据库视图,从另一个数据库引入静态数据。然后,您的模型可以指向此数据库视图。您甚至可以在数据库视图中创建联接

# 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)