#django #django-views
#django #django-представления
Вопрос:
Использую Django уже < 1 год, но этот для меня в новинку. Надеюсь, кто-нибудь?
Что я пытаюсь сделать, это прочитать объект Person из одной базы данных (только для чтения, минимальные данные о персонаже), чтобы заполнить мою базу данных (r / w, более подробная информация о персонаже).
У меня есть 2 модели в разных базах данных:
everyone.py : класс Person(модели.Модель): 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:
класс Person (модели.Модель):
emplid = модели.CharField(max_length=11, db_column=’emplid’, primary_key=True)
… (другие поля удалены)
class Meta:
db_table = u'person'
app_label = u'commons'
db_tablespace = u'people'
Модель от 2-го лица — это моя база данных по умолчанию, поэтому # 1 — это «все.Person» и # 2 — это просто «Person».
Я пытался (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 жалуется: глобальное имя ‘everybody’ не определено.
Если я заменю «Person» на «everyone.Person», этот код работает (но, конечно, я обращаюсь не к той базе данных.
Когда я делаю:
person = everyone.Person.objects.get(pk=emplid)
в командной строке с неверным emplid оболочка корректно возвращает
condition everyone.Person.DoesNotExist raised
Я могу обойти эту проблему, используя «filter» вместо «get», и разобраться с возвращаемым объектом QuerySet, но мне просто интересно, заметил ли это кто-нибудь еще и знает, как заставить «Get» работать в случае доступа к другой БД.
спасибо, Брайан
Ответ №1:
Ни пространства имен Python, ни несколько баз данных работают совсем не так.
Если вы определяете оба этих Person
класса в одном models.py файл, тогда второй полностью переопределяет первый, а первый фактически не существует, насколько это касается Python.
Даже если бы оно существовало, вы бы не называли его как everyone.Person
. Это было бы только в том случае, если бы вы определили это внутри модуля, называемого everyone.py , или если вы определили это в другом приложении и сделали from everyone import models as everyone
.
Комментарии:
1. Извините, что не включил этот бит. Две модели находятся в разных файлах, everyone.py и people.py . Но ваш ответ дал мне ответ, который сработал! Если я добавлю в свой views.py : «из commons.everyone импортируйте Person как Bob», затем Bob. DoesNotExist не существует. Бинго, но я все еще говорю, что синтаксис нескольких баз данных должен работать, т. Е. «все. Человек. Не существует «.