Non è possibile accedere a verbose_name direttamente dal modello. Da quello che vedo tu hai tre opzioni.
Opzione uno (il più semplice). Assegnare il nome verbose nel controller e quindi accedervi dal modello:
# in controller
render_to_response('template.html', {'scrib_verbose_name': Scrib._meta.verbose_name})
# in a view template.html
Verbose name of a Scrib model: {{ scrib_verbose_name }}
Opzione due: scrivere voi stessi un aiutante vista che restituirà il verbose_name (o altro campo dalla classe _meta) per una determinata classe.
Aggiornamento Terza opzione (una punta di cappello per Uku Loskit) - definire un metodo su un modello di scrittura che restituisce il meta oggetto (o qualsiasi campo particolare da esso).
# method in a Scrib model
def meta(self):
return self._meta
# later on in a template - scrib is a instance of Scrib model
<h1>{{ scrib.meta.verbose_name }}</h1>
Update2 Se ti ostini a accedendo direttamente nome verbose dalla scribs
(che è il risultato di Scrib.objects.all()
), allora si può fare cose del genere:
scribs = Scrib.objects.all()
scribs.verbose_name = Scrib._meta.verbose_name
# in a template you can now access verbose name from a scribs variable
{{ scribs.verbose_name }}
Update3 Ancora un altro modo andare sta usando il modello inhertinace per poter accedere al nome dettagliato dall'istanza di qualsiasi modello che eredita da quello personalizzato.
# base model (inherits from models.Model)
class CustomModel(models.Model):
def meta(self):
return self._meta
class Meta:
abstract = True
# Scrib now inherit from CustomModel
class Scrib(CustomModel):
# do any stuff you want here ...
Scrib ora eredita da CustomModel che ci fornisce con la proprietà meta. Ogni modello che erediterà dalla classe CustomModel avrà questa proprietà. È la soluzione più pulita e flessibile.
realtà 'scribs' è uguale t o 'Scrib.objects.all()' quindi è un oggetto multiplo. Devo mettere 'Scrib' invece' Scrib.objects.all() 'in' scribs'? –
Beh, se si esegue il looping del modello tramite gli scribs, è possibile utilizzare '.meta.verbose_name' su ogni istanza di scrib in un ciclo. Se si desidera visualizzarlo solo una volta (prima del ciclo effettivo, ad esempio), è possibile eseguire semplicemente '{{scribs.0.meta.verbose_name}}' per visualizzare un nome dettagliato utilizzando il primo elemento di scrittura in un array di scribs. – WTK
Non posso inserire direttamente il modello 'Scrib' in' scribs', scorrere in 'scribs.objects.all' e usare' scribs.verbose_name' o qualcosa di più semplice? Altrimenti dovrò mettere questa funzione su tutti i miei modelli? –