Добавление второй устаревшей базы данных в существующий проект django 1.2 - PullRequest
1 голос
/ 08 марта 2011

У меня есть проект django, который я использовал некоторое время, но теперь я хочу добавить новый набор данных из второй базы данных, не относящейся к django. Я успешно настроил свой файл settings.py для использования новой базы данных, которая называется 'mediawikidb'.

Я могу выполнить следующую команду:

python manage.py inspectdb --database=mediawikidb

и я получаю модельные представления django для базы данных, но интересующая меня таблица называется 'User'. Вывод inspectdb выглядит следующим образом:

class User(models.Model):
user_id = models.IntegerField(primary_key=True)
user_name = models.CharField(unique=True, max_length=255)
user_real_name = models.CharField(max_length=255)
user_password = models.TextField()
user_newpassword = models.TextField()
user_newpass_time = models.CharField(max_length=14, blank=True)
user_email = models.TextField()
user_options = models.TextField()
user_touched = models.CharField(max_length=14)
user_token = models.CharField(max_length=32)
user_email_authenticated = models.CharField(max_length=14, blank=True)
user_email_token = models.CharField(max_length=32, blank=True)
user_email_token_expires = models.CharField(max_length=14, blank=True)
user_registration = models.CharField(max_length=14, blank=True)
user_editcount = models.IntegerField(null=True, blank=True)
class Meta:
    db_table = u'user'

Я читал документы [0], но я довольно смущен, поэтому подумал, что спрошу здесь после прочтения. Я не могу просто бросить это в моей модели, не так ли? Если я это сделаю, это наверняка вызовет проблемы с django. Как мне это сделать?

Мой другой вопрос: как django узнает, к какой базе данных относится этот экземпляр модели «Пользователь»? Я чувствую, что что-то упустил, но не могу найти ничего, что имеет смысл.

Как мне настроить мою модель, чтобы иметь возможность доступа к этим данным, ничего не путая в django?

[0] http://docs.djangoproject.com/en/dev/topics/db/multi-db/

Ответы [ 2 ]

2 голосов
/ 08 марта 2011

Полагаю, вы обеспокоены тем, что таблица называется user, а класс модели называется User.Django использует app_modelname для своих таблиц, поэтому таблица django.contrib.auth равна auth_user

Django не знает, к какой базе данных относится ваша модель пользователя.Он примет значение по умолчанию, поэтому будет искать таблицу user, которая, вероятно, не существует в вашей базе данных.

Чтобы запросить его, вам нужно будет указать конкретную базу данных (User.objects.using('mydb').all()) или настроить автоматическую маршрутизацию базы данных, как предложил Дмитрий.

1 голос
/ 08 марта 2011

Проверьте следующие документы:

http://docs.djangoproject.com/en/dev/topics/db/multi-db/#an-example

У них есть пример маршрутизатора, который указывает, откуда считывать данные и записывать данные.Для вашей пользовательской модели вы можете настроить все взаимодействия с базой данных mediawiki, а все другие модели будут использовать вашу обычную базу данных.

Просто убедитесь, что отношения отключены ...

class MyAppRouter(object):

    def _is_user_model(model):
        return str(model.__name__) == 'User' and model._meta.app_label == 'myapp'

    def db_for_read(self, model, **hints):
        if self._is_user_model(model):
            return 'mediawikidb'
        return None

    def db_for_write(self, model, **hints):
        if self._is_user_model(model):
            return 'mediawikidb'
        return None

    def allow_relation(self, obj1, obj2, **hints):
        if self._is_user_model(obj1) or self._is_user_model(obj2):
            return False
        return None

    def allow_syncdb(self, db, model):
        if db == 'mediawikidb':
            return False
        elif self._is_user_model(model):
            return False
        return None
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...