1
我有一個函數允許您創建一條消息併發送它。我有一個叫做person的Usermodel,它有一個叫做inbox的屬性。該屬性確定用戶是否想要啓用他的收件箱。在django表單中傳遞request.user錯誤
我有一個叫做NewMessageForm的窗體。我試圖通過表單提出錯誤,如果已驗證的用戶將他的收件箱停用,但爲了這樣做,我必須通過不允許我這樣做但僅在視圖中的表單來獲取request.user。
有人可以幫助我。
global name 'request' is not defined
File "C:\mysite\pet\forms.py" in clean_recipient
329. user = User.objects.get(user=request.user)
Exception Type: NameError at /create/
Exception Value: global name 'request' is not defined
車型
class Person(models.Model):
inbox = (
('A', 'Activate'),
('D', 'Deactivate'),
('F', 'Permit To 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
形式
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 your inbox , Please enable it at profile settings")
if recipient:
try:
recipient = User.objects.get(username=recipient)
except User.DoesNotExist:
raise forms.ValidationError("This username does not exist")
return recipient
else:
return recipient
意見
@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})
謝謝,請問爲什麼django不允許request.user在表單中? – JackRoster
,因爲請求僅在默認情況下在視圖中可用。如果您打算不僅在表單中而且在其他地方使用請求對象,則可以查看https://github.com/jedie/django-tools/blob/master/django_tools/middlewares/ThreadLocal.py這是一個在線程中保存請求的中間件,您可以在任何地方輕鬆導入。但要小心,Django社區中的一些用戶可能認爲這種方法很糟糕。 – mawimawi
非常感謝您的幫助 – JackRoster