Topic: Visualizzare in List_Display sul pannello admin  (Letto 1246 volte)

0 Utenti e 1 Visitatore stanno visualizzando questo topic.

Offline akus85

  • python sapiens
  • *****
  • Post: 505
  • Punti reputazione: 0
    • Mostra profilo
    • BitOverflow
Visualizzare in List_Display sul pannello admin
« il: Giugno 13, 2009, 19:29 »
Ciao a tutti,sono sempre alle prese col mio piccolo progetto in Django ed i problemi non mancano  ;) man questo è il bello!
Vengo al dunque,in pratica utilizzo il list_display per visualizzare in modo riepilogativo i vari dati registrati solo che nel i dati nel campo Prenotazioni me li salva ma non li visualizza nell'interfaccia però il counter va avanti ed effettivamente sono memorizzati.
In allegato trovate l'allegato con i sorgenti il problema dovrebbe stare in /magazzino/models.py  o in /magazzino/admin.py  :eyeroll:
i dati di accesso sono sempre farm  farm

Offline ubuntu_of_fortune

  • python sapiens
  • *
  • moderatore
  • Post: 745
  • Punti reputazione: 3
    • Mostra profilo
Re: Visualizzare in List_Display sul pannello admin
« Risposta #1 il: Giugno 14, 2009, 09:22 »
Ciao a tutti,sono sempre alle prese col mio piccolo progetto in Django ed i problemi non mancano  ;) man questo è il bello!
Vengo al dunque,in pratica utilizzo il list_display per visualizzare in modo riepilogativo i vari dati registrati solo che nel i dati nel campo Prenotazioni me li salva ma non li visualizza nell'interfaccia però il counter va avanti ed effettivamente sono memorizzati.
In allegato trovate l'allegato con i sorgenti il problema dovrebbe stare in /magazzino/models.py  o in /magazzino/admin.py  :eyeroll:
i dati di accesso sono sempre farm  farm

Dunque a parte che stilisticamente non mi piace per nulla la soluzione che hai implementato :P (E' una critica costruttiva - ora riporto la soluzione)
[hlpycode]
class Prenotazioni(models.Model):
   cliente_prenotazione=models.ManyToManyField(Clienti,verbose_name="cliente")
   servizio_prenotazione=models.ManyToManyField(Servizi,verbose_name="servizi")
   data_prenotazione=models.DateField(verbose_name="data")
   cognome=""
   nome=""
   servizio=""
   costo=""
   tempo=""
   def __unicode__(self):
      cliente=u"%s"  % (' '.join([str(pren) for pren in self.cliente_prenotazione.all()]))
      cliente=split(cliente," ")
      nome=cliente[0]
      cognome=cliente[1]
      print "nome",nome
      print "cognome ",cognome
      print type(cognome)
      #
      servizi=u"%s" % (' '.join([str(serv_pren) for serv_pren in self.servizio_prenotazione.all()]))
      servizi=split(servizi," ")
      servizio=servizi[0]
      costo=servizi[1]
      tempo=servizi[2]
      
      print "servizio ",servizio
      print "costo ",costo
      print "tempo ",tempo
      
      return u"%s %s %s %s %s" % (self.cognome,self.nome,self.servizio,self.costo,self.tempo)

      #return u"%s %s" % (' '.join([str(pren) for pren in self.cliente_prenotazione.all()]),
      #' '.join([str(serv_pren) for serv_pren in self.servizio_prenotazione.all()]))
      
   class Meta:
      verbose_name_plural="Prenotazioni"
[/hlpycode]

E poi in admin.py
[hlpycode]
class PrenotazioniListOption(admin.ModelAdmin):
   list_display=('cognome','nome','servizio','costo','tempo')
[/hlpycode]

Premetto che il codice non l'ho fatto girare per mancanza di tempo.. ma i problemi sono diversi:
  • I valori di nome, cognome, servizio, costo e tempo quando sono inseriti ? Visto che li vuoi far stampare con list_display
  • Il metodo Unicode viene invocato quando nel list_display metti ad esempio '__str__' per la rappresentazione dell'oggetto quindi per come hai definito il list_display non verra' richiamato comunque..

Le soluzioni possono essere diverse e te ne posto una in un altro thread per rendere leggibile il tutto :)
« Ultima modifica: Giugno 14, 2009, 09:30 da ubuntu_of_fortune »

Offline ubuntu_of_fortune

  • python sapiens
  • *
  • moderatore
  • Post: 745
  • Punti reputazione: 3
    • Mostra profilo
Re: Visualizzare in List_Display sul pannello admin
« Risposta #2 il: Giugno 14, 2009, 09:29 »
Potresti modificare la classe di amministrazione in questo modo

[hlpycode]
class PrenotazioniListOption(admin.ModelAdmin):
   
    def clienti(self, pren):
        tag = "<ul>"
        for cliente in pren.cliente_prenotazione.all():
            tag += "<li>%s</li>"%(str(cliente))
        return tag + "<ul>"
    clienti.short_description = "Clienti"
    clienti.allows_tag = True
   
    def servizi(self, pren):
        tag = "<ul>"
        for servizio in pren.servizio_prenotazione.all():
            tag += "<li>%s</li>"%(str(servizio))
        return tag + "<ul>"
    servizi.short_description = "Servizi Prenotazione"
    servizi.allows_tag = True
       
   
   list_display=('clienti','servizi')
[/hlpycode]

 :ok:

Ovviamente questa e' UNA possibile soluzione, dipende da quello che vuoi farci.
Non voglio darti altre soluzioni per stimolare anche la tua curiosita' a trovarne delle altre :)

Puoi definire delle properties nella classe del modello, spostare i metodi nella classe del modello........ insomma, fai tu :P  8)

d_traveler

Re: Visualizzare in List_Display sul pannello admin
« Risposta #3 il: Giugno 14, 2009, 15:05 »
ma che intendi per stilisticamente? e da cosa "giudichi" se un codice è stilisticamente buono o no?

Offline agente mm8

  • python neanderthalensis
  • ****
  • Post: 401
  • Punti reputazione: 0
  • Non ho talenti straordinari. Sono solo curioso.
    • Mostra profilo
Re: Visualizzare in List_Display sul pannello admin
« Risposta #4 il: Giugno 14, 2009, 16:09 »
ma che intendi per stilisticamente? e da cosa "giudichi" se un codice è stilisticamente buono o no?

Leggi questo http://www.python.org/dev/peps/pep-0008/ :sisi:

Offline ubuntu_of_fortune

  • python sapiens
  • *
  • moderatore
  • Post: 745
  • Punti reputazione: 3
    • Mostra profilo
Re: Visualizzare in List_Display sul pannello admin
« Risposta #5 il: Giugno 15, 2009, 15:38 »
ma che intendi per stilisticamente? e da cosa "giudichi" se un codice è stilisticamente buono o no?

Leggi questo http://www.python.org/dev/peps/pep-0008/ :sisi:

Ottima la segnalazione del link, ma il mio "stilisticamente" era piu' da un punto di vista progettuale che di scrittura di codice!

Da cosa giudichi una soluzione buona o no?! Da quanto e' ben pensata e ingegnosa.. tutto qui! Niente di strano o nessuna metrica per giudicare! 8)
Questione di gusti  la maggiorparte delle volte... ognuno, appunto, ha il suo stile!

d_traveler

Re: Visualizzare in List_Display sul pannello admin
« Risposta #6 il: Giugno 15, 2009, 15:41 »
ok

Offline ubuntu_of_fortune

  • python sapiens
  • *
  • moderatore
  • Post: 745
  • Punti reputazione: 3
    • Mostra profilo
Re: Visualizzare in List_Display sul pannello admin
« Risposta #7 il: Giugno 15, 2009, 15:44 »
ok

Caspita... per aver risposto solo OK vuol dire che ti ho convinto! :P
Meno male! :D

d_traveler

Re: Visualizzare in List_Display sul pannello admin
« Risposta #8 il: Giugno 15, 2009, 15:44 »
no, è solo che siamo off topic per parlare di questo argomento

Offline ubuntu_of_fortune

  • python sapiens
  • *
  • moderatore
  • Post: 745
  • Punti reputazione: 3
    • Mostra profilo
Re: Visualizzare in List_Display sul pannello admin
« Risposta #9 il: Giugno 15, 2009, 15:47 »
no, è solo che siamo off topic per parlare di questo argomento

Bravissimo  :ok:  ;)

Offline akus85

  • python sapiens
  • *****
  • Post: 505
  • Punti reputazione: 0
    • Mostra profilo
    • BitOverflow
Re: Visualizzare in List_Display sul pannello admin
« Risposta #10 il: Giugno 15, 2009, 22:47 »
ubuntu_of_fortune ti ringrazio per la soluzione,effettivamente stilisticamente non è il massimo...!!!  :embarrassed:

Offline ubuntu_of_fortune

  • python sapiens
  • *
  • moderatore
  • Post: 745
  • Punti reputazione: 3
    • Mostra profilo
Re: Visualizzare in List_Display sul pannello admin
« Risposta #11 il: Giugno 16, 2009, 15:11 »
ubuntu_of_fortune ti ringrazio per la soluzione,effettivamente stilisticamente non è il massimo...!!!  :embarrassed:

Ma figurati.. si impara sbagliando ;)
Fai una cosa, prima di segnare come risolto questo topic, posta un'altra soluzione :)
Anche se simile ma diversa in qualcosina.. visto che ci sono diversi modi per farlo e' interessante vedere come ognuno affronta il problema a modo suo ;)

ok?! :ok:

Offline akus85

  • python sapiens
  • *****
  • Post: 505
  • Punti reputazione: 0
    • Mostra profilo
    • BitOverflow
Re: Visualizzare in List_Display sul pannello admin
« Risposta #12 il: Giugno 17, 2009, 20:22 »
Una soluzione anche se non proprio elegantissima (ma fa il suo lavoro) potrebbe essere quella di "dividere" il dati da mettere nel list_display,in questo modo:
[hlpycode]
class PrenotazioniListOption(admin.ModelAdmin):

   def clienti(self, pren):
      tag =""
      for cliente in (pren.cliente_prenotazione.all()):
         tag += "%s" % (str(cliente))
      return tag
      
   def servizio(self, pren):
      tag =""
      for servizio in pren.servizio_prenotazione.all():
         tag += "%s"%(str(servizio))
         t=split(tag," ")
      return t[0]
      
   def costo(self, pren):
      tag =""
      for servizio in pren.servizio_prenotazione.all():
         tag += "%s"%(str(servizio))
         t=split(tag," ")
      return t[1]
      
   def tempo(self, pren):
      tag =""
      for servizio in pren.servizio_prenotazione.all():
         tag += "%s"%(str(servizio))
         t=split(tag," ")
      return t[2]

   list_display=('clienti','servizio','costo','tempo','data_prenotazione')   
[/hlpycode]

in modo tale da avere nel pannello d'amministrazione una visualizzazione riepilogativa,in questo modo:

« Ultima modifica: Giugno 18, 2009, 15:27 da ubuntu_of_fortune »

Offline ubuntu_of_fortune

  • python sapiens
  • *
  • moderatore
  • Post: 745
  • Punti reputazione: 3
    • Mostra profilo
Re: Visualizzare in List_Display sul pannello admin
« Risposta #13 il: Giugno 18, 2009, 15:27 »

Ok, l'idea di separare le informazioni in colonne diverse e' ottima pero' ti chiedo una cosa? Che succede se una prenotazione ha piu' di un servizio?
Hai provato? Che cosa riesci a stampare con t[0].. e simili se ne hai di piu'?

poi un'ultima cosa, ora non posso entrare direttamente nel merito, ma perche' una prenotazione puo' avere diversi clienti?
Forse dovresti riconsiderare anche il modello! ;)  :ok:

(Ovviamente dico forse, non so per certo :P )