2009-04-17 10 views
6

Estoy siguiendo el estado de un usuario en un modelo. Para el modelo 'Lección', tengo el estado 'Terminado', 'Aprendizaje', 'Visto'. En una vista para una lista de modelos, quiero agregar el estado del usuario. ¿Cuál es la mejor manera de hacer esto?¿Agregar solicitud al método del modelo django?

Una idea: Agregar la solicitud a un método de modelos haría el truco. ¿Es eso posible?

Editar: quise decir en templatecode: {{lesson.get_status}}, con get_status (self, request). ¿Es posible? No funciona (todavía).

Respuesta

1

sí, se puede añadir un método para su modelo con un parámetro de solicitud:

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

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

es posible llamar a este método desde un punto de vista? ese es el objetivo y no funciona (todavía)! –

+0

me refiero a templatecode, como {{lesson.update_status}} –

+0

No se pueden pasar argumentos a un método desde una plantilla. –

2

Si su estado es un valor que cambia, usted tiene que romper este en dos partes separadas.

  1. Actualización del estado. Esto debe llamarse en una función de vista. El trabajo real, sin embargo, pertenece al modelo. La función de vista llama al método del modelo y guarda.

  2. Mostrando el estado. Esto es solo una representación de cadena del estado.

Modelo

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. 

función de vista

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

Plantilla

<p>Your status is {{object.theState}}.</p> 
Cuestiones relacionadas