我想制作以下代码,让用户在Django中更新自己的状态。他们的更新应显示在同一模板上。但它不起作用。例如,当用户在状态textarea中键入“成为黑客不是一天的工作”并单击表单下方的更新按钮时。更新应显示在同一模板上供其朋友查看。就像我们在fb上发布状态更新一样。
模型
class mob (models.Model):
username=models.ForeignKey(User, unique=True)
state_province=models.CharField(max_length=50)
body=models.TextField(max_length=10000)
date=models.DateTimeField()
def __unicode__(self):
return u"%s - %s - %s - %s" % (self.username, self.state_province, self.body, self.date)
def get_absolute_url(self):
return "/post/%s/" % unicode(self.id)
def get_author_url(self):
return "/u/%s/p/0" % (self.username)
表格
class mobForm(ModelForm):
class Meta:
model=mob
fields=('body','username','state_province','date')
widgets={
'body':Textarea(attrs={"rows":2, "cols":40}),
'username': (HiddenInput),
'state_province': (HiddenInput),
'date':(HiddenInput),
}
查看
def homey(request):
#if there’s nothing in the field do nothing.
if request. method != "":
return HttpResponseRedirect('/homi/')
newmob=mob()
newmob.username=request.user
newmob.date=datetime.datetime.now()
newmob.body=request.POST['body']
if request.POST['body'] <> '':
newmob.body=body.objects.get(id=request.POST['body'])
newmob.save()
return HttpResponseRedirect('/homi/')
else:
return render_to_response('meek_home.html', {'mobForm': mobForm },context_instance=RequestContext(request))
模板
{% extends "base_meek.html" %}
{% block body %}
<div class="form">
<form action="." method="post" enctype="multipart/form-data">
<table>
{{ mobForm }}
</table>
<input type="submit" value="Update" />
</form>
{% endblock %}
答案 0 :(得分:0)
您尝试处理视图的方式很奇怪。首先,我不确定在什么情况下请求方法是空白的。其次,您不需要将请求重定向回相同的视图。第三,当您采用奇怪的方式检查POST主体是否未设置&lt;&gt;您将它们重定向到没有表单数据集的同一视图。
视图逻辑应该是这样的总结:
除了您认为的整个结构性问题之外,我建议的主要调整是如果设置表单该怎么办。删除重定向。而是尝试将表单集返回到刚保存的模型。
if request.POST['body']:
newmob.body=body.objects.get(id=request.POST['body'])
newmob.save()
theForm = mobForm(instance=newmob)
return render_to_response('meek_home.html', {'mobForm': theForm },context_instance=RequestContext(request))
我也不太了解你对POST ['body']的价值。您期望它们传递对象的实际ID吗?我以为这会是某种类型的消息?
每条评论更新
您可能会在下面的评论中遇到错误代码,因为在您执行此操作之前,您根本不会检查任何内容。它可能是这样的:
def home(request):
newmob=mob()
if request.method == "POST":
newmob.username=request.user
newmob.date=datetime.datetime.now()
body = request.POST.get('body')
if body:
newmob.body=body
newmob.save()
theForm=mobForm(instance=newmob)
return render_to_response('home.html', {'mobForm':theForm}, context_instance=RequestContext(request))