I'm using djnago-tables2 to display data from my event model. I need to get the current request user into the render method of the table (to further call a model function to get the response of the current user).
How can i do this?
My Model
class Event(models.Model):
name=models.CharField(max_length=254)
start=models.DateTimeField()
end=models.DateTimeField()
invited_user=models.ManyToManyField(User,blank=True)
def getResponseFromUser(self, user):
try:
return Response.objects.filter(event=self, user=user).order_by('-pk')[0]
except Exception:
return None
class Response(models.Model):
user=models.ForeignKey(User)
event=models.ForeignKey(Event)
timestamp=models.DateTimeField(auto_now_add=True)
SEEN=0
YES=1
PROBABLY_YES=2
PROBABLY_NO=3
NO=4
RESPONSE=(
(SEEN, _('seen but undecided')),
(YES, _('Yes')),
(PROBABLY_YES, _('probably yes')),
(PROBABLY_NO, _('probably no')),
(NO, _('No')),
)
response=models.IntegerField( choices=RESPONSE, default=SEEN)
@property
def getResponseText(self):
return self.RESPONSE[self.response][1]
Table
class EventTable(tables.Table):
requestUser=None # to be set from request (externally)
eventResponse = tables.Column(empty_values=(), verbose_name="Response", orderable=False)
class Meta:
model = Event
# add class="paleblue" to <table> tag
attrs = {"class": "table"}
exclude=['id', 'user_can_invite', 'description', 'organizer']
def render_eventResponse(self, record):
responseObject=record.getResponseFromUser(self.requestUser)
if not responseObject:
return ''
else:
return responseObject.getResponseText
View
class PersonalEventTableView(SingleTableView):
model = Event
table_class = EventTable
template_name = 'list_events.html'
paginate_by = 50
in urls.py the view is rendered with PersonalEventTableView.as_view()
Can anyone help ?
Well you can use this plugin here: https://github.com/Alir3z4/django-crequest
Use it like this:
def render_eventResponse(self, record):
from crequest.middleware import CrequestMiddleware
current_request = CrequestMiddleware.get_request()
user = current_request.user
responseObject=record.getResponseFromUser(user)
if not responseObject:
return ''
else:
return responseObject.getResponseText