2009-04-17 20 views
6

Sto monitorando lo stato di un utente su un modello. Per il modello 'Lesson' ho lo stato 'Finito', 'Apprendimento', 'Visto'. In una vista per un elenco di modelli voglio aggiungere lo stato dell'utente. Qual è il modo migliore per farlo?aggiungi richiesta al metodo del modello django?

Un'idea: l'aggiunta della richiesta a un metodo di modelli avrebbe funzionato. È possibile?

Modifica: intendevo in templatecode: {{lesson.get_status}}, con get_status (self, request). È possibile? Non funziona (ancora).

risposta

1

Sì, è possibile aggiungere un metodo per il modello con una richiesta paramater:

class MyModel(models.Model): 
    fields.... 

    def update_status(self, request): 
     make something with the request... 
+0

è possibile chiamare questo metodo da un punto di vista? questo è l'obiettivo e non funziona (ancora)! –

+0

intendevo dal templatecode, come {{lesson.update_status}} –

+0

Non è possibile passare argomenti a un metodo da un modello. –

2

Se lo stato è un valore che cambia, si deve rompere questo in due parti distinte.

  1. Aggiornamento dello stato. Questo deve essere chiamato in una funzione di visualizzazione. Il vero lavoro, tuttavia, appartiene al modello. La funzione di visualizzazione chiama il metodo del modello e fa il salvataggio.

  2. Visualizzazione dello stato. Questa è solo una rappresentazione di stringa dello stato.

Modello

class MyStatefulModel(models.Model): 
    theState = models.CharField(max_length=64) 
    def changeState(self): 
     if theState is None: 
      theState= "viewed" 
     elif theState is "viewed": 
      theState= "learning" 
     etc. 

View Funzione

def show(request, object_id): 
    object= MyStatefulModel.objects.get(id=object_id) 
    object.changeState() 
    object.save() 
    render_to_response(...) 

Template

<p>Your status is {{object.theState}}.</p> 
Problemi correlati