Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

add request to django model method?

I'm keeping track of a user status on a model. For the model 'Lesson' I have the status 'Finished', 'Learning', 'Viewed'. In a view for a list of models I want to add the user status. What is the best way to do this?

One idea: Adding the request to a models method would do the trick. Is that possible?

Edit: I meant in templatecode: {{ lesson.get_status }}, with get_status(self, request). Is it possible? It does not work (yet).

like image 976
Jack Ha Avatar asked Apr 17 '09 10:04

Jack Ha


2 Answers

If your status is a value that changes, you have to break this into two separate parts.

  1. Updating the status. This must be called in a view function. The real work, however, belongs in the model. The view function calls the model method and does the save.

  2. Displaying the status. This is just some string representation of the status.

Model

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 Function

 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>
like image 98
S.Lott Avatar answered Oct 14 '22 03:10

S.Lott


Yes, you can add a method to your model with a request paramater:

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

    def update_status(self, request):
        make something with the request...
like image 29
Andrea Di Persio Avatar answered Oct 14 '22 02:10

Andrea Di Persio