Passing request.user in django forms error -


i have function allows create message , send . have usermodel called person , has attribute called inbox . attribute determines if user enable inbox or not.

i have form called newmessageform . trying raise error via form if authenticated user has inbox deactivated in order , must obtain request.user via form not allowing me in views.

can me .

global name 'request' not defined  file "c:\mysite\pet\forms.py" in clean_recipient   329.             user = user.objects.get(user=request.user)  exception type: nameerror @ /create/ exception value: global name 'request' not defined 

models

class person(models.model):  inbox = (         ('a', 'activate'),         ('d', 'deactivate'),         ('f', 'permit friends only'), )      user = models.foreignkey(user)     inbox = models.charfield(max_length=1, choices=inbox ,default='a')      def __unicode__(self):         return self.user.username   class thread(models.model):     subject = models.charfield(max_length=100, blank=true)     user = models.foreignkey(user)   class message(models.model):     user = models.foreignkey(user, related_name='sender')     recipient = models.foreignkey(user, related_name='recipient')     created = models.datetimefield(auto_now_add=true)     body = models.charfield(max_length=1000)     read = models.booleanfield(default=false)     sentmessage = models.booleanfield(default=false)     thread = models.foreignkey(thread)     draft = models.booleanfield(default=false)      def __unicode__(self):         return self.body 

forms

class newmessageform(forms.modelform):     recipient = forms.charfield(required=false,max_length=15)     message = forms.charfield(widget=forms.textarea,required=true,max_length=15)      def clean_recipient(self):              recipient = self.cleaned_data['recipient']             user = user.objects.get(user=request.user)             if person.inbox == d:                     raise forms.validationerror("you have deactivated inbox , please enable @ profile settings")             if recipient:                 try:                     recipient = user.objects.get(username=recipient)                 except user.doesnotexist:                     raise forms.validationerror("this username not exist")                 return recipient             else:                  return recipient 

views

@login_required def create(request):     person = person.objects.get(user=request.user)     form = newmessageform()     if request.post.get('_send', false):         form = newmessageform(request.post)         if form.is_valid():             recipient = form.cleaned_data['recipient']             subject = form.cleaned_data['subject']             message = form.cleaned_data['message']             if recipient:                 thread = thread.objects.create(subject=subject,user=request.user)                 recipient = user.objects.get(username=recipient)                 message = message.objects.create(user=request.user,recipient=recipient,body=message,thread=thread,sentmessage=true,read=false)                 return httpresponseredirect(reverse('world:message'))     return render(request,'create.html',{'messages':messages,'form':form,'person':person}) 

you overwrite __init__ of form require request parameter:

class newmessageform(forms.modelform):      def __init__(self, request, *args, **kwargs):         self.request = request         super(newmessageform, self).__init__(*args, **kwargs) 

and instantiate form in view this:

form = newmessageform(request) 

and

form = newmessageform(request, request.post) 

now have self.request in newmessageform instance , can use self.request.user it.


Comments