Non sono sicuro che la mia ricerca, riportato qui, sarebbe stato di grande aiuto per kender perché, tra le altre cose, non so se stesse parlando non solo di due siti di amministrazione ma anche di due database, uno per ciascuno. Questa è la mia situazione. Ho avuto la brillante idea che volevo che una delle mie app, una nuova app, avesse il proprio database e le proprie pagine di amministrazione.
Ma mi sono imbattuto in un problema con l'approccio di sottoclasse di AdminSite di Bernhard Vallant, anche se sembra essere la cosa ortodossa ed essenzialmente corretta da fare. Ho risolto il problema.
Ecco il mod per il codice di Bernhard Vallant che ho trovato per essere assolutamente necessaria:
from django.contrib.admin.sites import AdminSite
class MyAdminSite(AdminSite):
pass
#or overwrite some methods for different functionality
myadmin = MyAdminSite(name='anything')
Sì, lo faccio davvero dire name = 'qualsiasi cosa' che si sceglie (a patto che non lo è 'admin ').E ho inserito e disinserito con esso e fallisce ogni volta senza l'assegnazione del nome nulla-ma-admin.
I sintomi che ho acquisito fosse che quando ho aggiunto il secondo database e creato un MyAdmin per esso e quindi registrato il modello con myadmin.register (My_ModelA), e andò a guardare le due pagine di app di amministrazione, quello per la mia nuova app che usava il secondo database e myadmin e il mio modello My_ModelA andava bene, ma la mia vecchia pagina di amministrazione mostrava link morti per i suoi modelli e quando ho cliccato su un link non morto per un'app (una vecchia app che usa il vecchio database) Ho ottenuto un codice 404 per l'effetto che la pagina non esisteva.
Inoltre, non so che è importante, ma ho fatto qualcosa di diverso da ciò che Bernhard Vallant ha fatto nel progetto urlconf:
from django.conf.urls import patterns, include, url
from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
url(r'^admin/', include('mynewapp.urls')),
url(r'^someword/admin/', include(admin.site.urls)),
)
OK "someword" è irrilevante --- lì per apparenze nei confronti dell'utente finale e non il nome di un'app o del progetto. Ma l'amministratore associato è quello per la mia vecchia app e il vecchio database. Nota l'inclusione autodiscover(). C'è un linguaggio oscuro nei documenti a cui Bernhard Vallant ha collegato il suo uso quando il progetto urlconf è configurato come ha Bernhard Vallant con l'importazione myadmin, ma anche con un riferimento all'amministratore predefinito.
E per l'urlconf per mynewapp ho:
from django.conf.urls import patterns, url, include
from myproject.admin import myadmin
urlpatterns = patterns('',
url(r'/', include(myadmin.urls))
)
urlpatterns += patterns('mynewapp.views',"... url() stuff for mynewapp's views"),
)
Nonostante la necessità assoluta di nominare l'istanza AdminSite internamente a qualcosa di diverso 'admin', devo aggiungere che, quando è arrivato il momento per il jazz il il file admin.py di mynewapp con alcune sottoclassi admin.ModelAdmin, era necessario utilizzare admin.ModelAdmin come classe genitore. dopotutto, myadmin è un'istanza di una sottoclasse di AdminSite. Come tale capisco che è alla pari con admin.site, non con admin.
Questo è tutto molto confuso per un NOOB come me perché admin, con il minuscolo, sembra un'istanza, e non ho familiarità con le istanze di sottoclassi. Quindi presumo che non lo sia.
quando provo a farlo, dopo aver effettuato l'accesso, ottengo il messaggio "Non si dispone dell'autorizzazione per modificare nulla". messaggio ... – kender
L'utente che si utilizza deve avere i campi is_staff e is_superuser impostati su true. Quindi dopo aver fatto una distinzione tra diversi utenti admin e cosa hanno accesso per vedere http://docs.djangoproject.com/en/1.2/topics/auth/#permissions –
Ok, ho capito. Ma non riesco ad avere un diverso set di template per 2 siti di amministrazione - entrambi cercano la directory 'admin /' nei template, anche uno è creato con l'argomento 'backoffice', che dovrebbe impostare il suo nome su 'backoffice '... – kender