首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django和架构:如何在项目之间共享“参考”数据库?

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

Stack Overflow用户
提问于 2011-05-24 19:22:51
回答 2查看 364关注 0票数 5

今天我带着一个关于Django的设计/体系结构问题而来。

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

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

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

代码语言:javascript
复制
job = get_object_or_404(Jobs.objects.select_related('state__town'), user=user)

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

我的问题:

  • 考虑引入dblink是个好主意(我不这么认为.)
  • ,面对这种情况,你会怎么做?

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

代码语言:javascript
复制
python manage.py loaddata geo.json

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

非常感谢您的回答。

EN

回答 2

Stack Overflow用户

发布于 2011-05-24 21:47:24

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

代码语言:javascript
复制
# locations.py
STATES = (('S1', 'State 1'), ('S2', 'State 2'))
TOWNS = (('T1', 'Town 1'), ('T2', 'Town 2'))

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

代码语言:javascript
复制
# 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)

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

票数 1
EN

Stack Overflow用户

发布于 2011-05-25 06:52:55

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6115730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档