试图让更新工作

时间:2012-02-08 00:24:11

标签: django post

我想制作以下代码,让用户在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 %}

1 个答案:

答案 0 :(得分:0)

您尝试处理视图的方式很奇怪。首先,我不确定在什么情况下请求方法是空白的。其次,您不需要将请求重定向回相同的视图。第三,当您采用奇怪的方式检查POST主体是否未设置&lt;&gt;您将它们重定向到没有表单数据集的同一视图。

视图逻辑应该是这样的总结:

  1. 如果请求是POST,请将数据加载到表单中。验证数据。如果它好,那么使用表单将模板渲染回来,以便在模板上填充数据。否则渲染回某种错误。
  2. 否则使用默认表单呈现模板,使其成为新模板。
  3. 除了您认为的整个结构性问题之外,我建议的主要调整是如果设置表单该怎么办。删除重定向。而是尝试将表单集返回到刚保存的模型。

    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=RequestConte‌​xt(request))