Задать вопрос

Как в django admin показать данные из модели, подключенной к mysql?

Разбираюсь с django наткнулся на очередную проблему, решение которой найти не смог. Запустил 'hello word' - админка со списком групп и юзеров, все редактируется, обновляется, удаляется. Использовал sqlite3 (пустая).

Решил сменить sqlite на mysql и в админке вывести таблицу из mysql-бд. Что может быть проще :)
mysql база уже содержит данные. Что сделал:

1) Добавил в DATABASES новую базу:
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': 'Archive',
        ...
    },
    'istok': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'istok',
        'USER': 'root',
        'PASSWORD': 'root',
    }
}
2) Поставил MySQL-python.
3) Создал (сгенерировал) модель (беру не все поля из таблицы):
class Doc(models.Model):
    channel_number = models.CharField(max_length=2, blank=True)
    session = models.DateTimeField(blank=True, null=True)
    size = models.IntegerField(blank=True, null=True)
    suffix = models.CharField(max_length=10, blank=True)
    class Meta:
        managed = False
        db_table = "archive"
4) Зарегал модель в админке
class DocAdmin(admin.ModelAdmin):
    list_display = ('channel_number ', 'session ', 'size ', 'suffix')

# Register your models here.
admin.site.register(Doc, DocAdmin)
5) Запускаю админку, секция появилась, но если кликнуть по Docs или по опции change валится с OperationalError at /admin/Docs/doc/ no such table: archive. По Add октрывает формочку с добавлением новой сущности (правда при добавлении тоже падает)

По сему подскажите, что делаю не так, что нужно сделать? Что не понятно мне:
1) Как django понимает к какой базе относится таблица archive. Я так понимаю сейчас она ее относит к дефолтной, как указать базу в таком случае? (Так вышло, что имя дефолтной базы совпадает с именем таблицы второй базы)
2) Как полностью переехать с SQLite, т.е. убрать ее из проекта?
3) Как и где django хранит список юзеров и их пароли, нигде толкового описания не нашел?
4) Как показывать не все данные из модели, а, например, разбивать по 20 штук?
  • Вопрос задан
  • 5121 просмотр
Подписаться 4 Оценить Комментировать
Решения вопроса 1
@freydev
1. Django всегда работает с базой "default", другие даже не принимает во внимание. Чтобы указать явно с какой базой работать, нужно использовать параметр using для всех методов базы, сделать это можно 2 способами: определить DATABASE_ROUTES или переопределить методы models.Model
https://docs.djangoproject.com/en/dev/topics/db/mu...

2. Думаю вы с этим уже разобрались

3. Юзеры хранятся в таблица auth_user, вместе с хешами паролей, если конечно вы не переопределили таблицу пользователей, https://docs.djangoproject.com/en/1.6/topics/auth/... тут есть коечто о
пользователях и о бакендах

4. Очень просто, Doc.objects.all()[:5] добавит в запрос limit 5, либо через class-based views использую объект Paginator
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
becks
@becks Автор вопроса
Удалил базу sqlite. Обозвал mysql базу "default" и выполнил syncdb. Работает.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 дек. 2024, в 20:40
10000 руб./за проект
22 дек. 2024, в 20:34
3000 руб./за проект
22 дек. 2024, в 20:12
10000 руб./за проект