Django Databrowse - rejestracja modeli z wszystkich aplikacji

Jakiś czas temu zainteresowałem się aplikacją dostarczaną razem z Django - databrowse. Aplikacja umożliwia przeglądanie wszystkich danych  z  bazy danych.  Należy jednak podać dla jakich modeli ma pokazać dane. Aby uaktywnić databrowse należy dodać do url'i adres pod którym będzie dostępne. Np:

    (r'^databrowse/(.*)', databrowse.site.root),

Należy także wskazać jakie modele będa dostępne, w następujący sposób:

    databrowse.site.register(NazwaModelu)

Sposób ten jest jednak uciążliwy ponieważ jeżeli by chciało się dodać do databrowse wszystkie modele z wszystkich aplikacji które mamy zainstalowane w settings.py to trzeba by ręcznie je wpisać wszystkie.

Najlepsze rozwiązanie to dodać wszystkie modele z wszystkich aplikacji z automatu. Miałem jednak problem jak automatycznie pobrać nazwy wszystkich modeli z danej aplikacji. Jednak po zastanowieniu doszło do mnie że przecież przy wykonaniu manage.py syncdb robione jest dokładnie to co potrzebuje.  Przejrzałem kod źródłowy Django który wykonuje syncdb  i odkryłem że po zaimportowaniu z django.db modułu models, mamy dostępną funkcje: get_apps() która zwróci nazwy wszystkich zainstalowanych apliakacji. Następnie funkcja get_models(nazwa_aplikacji) zwróci nam klasy wszystkich modeli dla danej aplikacji. Na tym etapie można już w bardzo prosty sposób zarejestrować wszystkie modele do databrowse:

from django.db import models
for app in models.get_apps():
    model_list = models.get_models(app)
    for model in model_list:
        databrowse.site.register(model)

Komentarze

fisher
2 April, 2008, 9:14 p.m.:

Czym się różni databrowse od django.contrib.admin?

Dominik Szopa
2 April, 2008, 10:23 p.m.:

Admin służy do edycji danych przez użytkownika końcowego produktu - edytora dodającego treść do serwisu. Databrowse to aplikacja dla developera umożliwiająca szybkie przeglądanie danych w tracie tworzenia serwisu. Np. chciałbym zobaczyć jakie ID w bazie danych ma obiekt X, albo pokazać wszystkie kolumny dla tabeli xyz. To taki jakby mysql query browser, z tym że nie wpisuje się zapytań SQL'owych.

fisher
3 April, 2008, 11:23 p.m.:

Dzięki za info. Chyba sobie wypróbuje databrowse, żeby zobaczyć czy mogło by mi się przydać - dotychczas przeglądanie danych o których wspomniałeś robił dla mnie właśnie django.contrib.admin.


Comments turned off