Django从单个表单元素(文本框)保存数据

时间:2014-02-02 07:54:00

标签: python html django post

我有一个简单的表单,其中有用户名和消息。单击提交按钮后,我希望将用户和消息的数据分别存储到数据库中。但是,我无法弄清楚我的'index.html'模板中应该包含'user'和'message'的位置。现在我在m.save()上收到了IntegrityError。

 "Exception Value: SimpleMessage_message.content may not be NULL"

模型

class User (models.Model):
    name = models.CharField(max_length=20)

    def __unicode__(self):              
        return self.name

class Message (models.Model):
    content = models.TextField(max_length=140)
    user = models.ForeignKey(User)
    time = models.DateTimeField()

    def __unicode__(self):              
        return self.content

views.py

def index (request):
    if request.method == 'POST':
    u = User(name=request.POST.get('user'))
    m = Message(content=request.POST.get('text'), user = u)
        u.save()
        m.save()
        return render_to_response('index.html', {
                'user': u,
                'message': m,
                }, RequestContext(request))
    else:
        u = User()
        m = Message()
        return render_to_response('index.html', {
                'user': u,
                'message': m,
                }, RequestContext(request)

的index.html

<form action="{% url 'index' %}" method = "post">
{% csrf_token %}
<input type="text" name="user" id="user" maxlength="20" placeholder = "Username">
<br>
<br>
<textarea rows="4" cols="35" name="text" maxlength="140" placeholder = "Message goes here"></textarea><br>
<input type="submit" value="Submit">
</form>

1 个答案:

答案 0 :(得分:1)

如果您收到错误CSRF token missing or incorrect.,但未在HTML源代码中看到CSRF令牌,则应确保使用的是RequestContext

from django.template import RequestContext

...

return render_to_response('index.html', {
            'user': u,
            'message': m,
            }, RequestContext(request))

这会使{% csrf_token %}标记可用于您的模板,如果它有用,您应该在HTML源代码中看到<input type="hidden" name="csrfmiddlewaretoken" value="somevaluehere"/>

(乍一看,看起来代码的其余部分应按预期工作,同时创建用户和消息条目)