【发布时间】:2015-09-17 10:29:55
【问题描述】:
我想在两个用户之间发送消息,但有两个问题: 首先,文本区域包含消息表单,它显示 HTML 代码,我想隐藏 HTML 代码,以保持文本区域清洁。 其次,它会以消息正文字段的名称引发异常。 这是我的代码:
views.py
@login_required(login_url='/sn/login/')
def compose(request, email):
send_from = UserProfile.objects.get_profile_user(request.user.email)
send_to = UserProfile.objects.get_profile_user(email)
if request.method == "POST":
form = MessageForm(request.POST)
if form.is_valid():
form.save(send_from, sent_to, None, None)
...
return HttpResponseRedirect(reverse('inbox'))
else:
form = MessageForm()
return render_to_response('sn/messages/compose.html',
{'form': form, 'user': send_to},
context_instance=RequestContext(request))
forms.py
class MessageForm(forms.Form):
body = forms.CharField(label="Introduce tu mensaje", max_length=500)
def clean(self):
body = self.cleaned_data['body'] # Error is in this line
if len(body) > 0:
raise ValidationError('No puedes enviar un mensaje vacio')
return self.cleaned_data
def save(self, send_from, send_to, parent_msg, replied_at):
body = self.cleaned_data['body']
message = Message(send_from = send_from,
send_to = send_to,
body = body,
parent_msg = parent_msg)
message.save()
if replied_at is not None:
message.replied_at = replied_at
message.save()
return message
models.py
class Message(models.Model):
body = models.CharField(max_length=500)
send_from = models.ForeignKey(UserProfile, related_name='sent_messages')
send_to = models.ForeignKey(UserProfile, related_name='received_messages', null=True, blank=True)
parent_msg = models.ForeignKey('self', related_name='next_messages', null=True, blank=True)
created = models.DateTimeField(default=datetime.now)
read_at = models.DateTimeField(default=None)
replied_at = models.DateTimeField(default=None)
撰写.html
{% load i18n %}
<form action="" method="post">{% csrf_token %}
<h5>Escribe aquí tu mensaje</h5>
<textarea rows="10" cols="50">
{{ form.as_p }}
</textarea><br/>
<input type="submit" value="Enviar"/><br/>
<a href="{% url 'messages_inbox' %}">Cancelar</a><br/>
</form>
错误是: 异常类型:KeyError 异常值:'body'
有人可以帮助我吗?谢谢!
【问题讨论】:
-
提交表单后是否出现错误?你能发布完整的堆栈跟踪(并检查 request.POST 的值)吗?