我有一个简单的表单,其中有用户名和消息。单击提交按钮后,我希望将用户和消息的数据分别存储到数据库中。但是,我无法弄清楚我的'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>
答案 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"/>
。
(乍一看,看起来代码的其余部分应按预期工作,同时创建用户和消息条目)