使用Django for< 1yr现在,但这个是新的我。希望有人吗?
我要做的是从一个数据库中读取一个Person对象(只读/最小人数)来填充我的数据库(r / w,更广泛的Person信息)。
我有两个模型,在不同的dbs中:
everyone.py: class Person(models.Model): emplid = models.CharField(max_length = 15,primary_key = True) ...(其他字段已删除)
class Meta:
app_label = u'everyone'
db_tablespace = u'everyone'
db_table = u'people_names'
managed = False
people.py:
class Person(models.Model):
emplid = models.CharField(max_length = 11,db_column ='emplid',primary_key = True)
...(其他字段已删除)
class Meta:
db_table = u'person'
app_label = u'commons'
db_tablespace = u'people'
第二人称模型是我的默认数据库,因此#1是“everyone.Person”而#2只是“人物”。
我试过(view.py):
try:
person = everyone.Person.objects.get(pk=emplid)
except everyone.Person.DoesNotExist: # person not found by "get"
do some stuff
finally:
do some other stuff
但django抱怨:全球名称“每个人”都没有定义。
如果我将“Person”替换为“everyone.Person”,则此代码有效(但我当然可以访问 错误的数据库。
当我这样做时:
person = everyone.Person.objects.get(pk=emplid)
在命令行中有一个错误的emplid,shell正确返回
condition everyone.Person.DoesNotExist raised
我可以使用“filter”而不是“get”来解决这个问题,并处理返回的QuerySet对象,但我只是想知道是否有其他人注意到这一点并且知道如何让“Get”在以下情况下工作访问另一个数据库。
thx,Brian
答案 0 :(得分:0)
这不是Python命名空间或多个数据库的工作方式。
如果你在同一个models.py文件中定义了这两个Person
类,那么第二个完全覆盖第一个,并且就Python而言,第一个实际上并不存在。< / p>
即使确实存在,也不会将其称为everyone.Person
。如果您在名为everyone.py的模块中定义它,或者您在另一个应用程序中定义它并执行from everyone import models as everyone
,则情况就是这样。