现在使用Django为<1yr,但这个对我来说是新手 . 希望有人吗?
我要做的是从一个数据库中读取一个Person对象(只读/最小人数)来填充我的数据库(r / w,更广泛的Person信息) .
我有2个模型,在不同的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对象,但我只是想知道是否有其他人注意到这一点并且知道如何在访问另一个db的情况下让“Get”工作 .
好的,Brian
1 回答
这不是Python命名空间或多个数据库的工作方式 .
如果你在同一个models.py文件中定义这两个
Person
类,那么第二个完全覆盖第一个,而第一个实际上并不存在就Python而言 .即使它确实存在,也不会将其称为
everyone.Person
. 如果你在名为everyone.py的模块中定义它,或者如果你在另一个应用程序中定义它并且做了from everyone import models as everyone
,那就是这种情况 .