我们增加如下页面:
/points/edit/<user_id> 添加积分页面(填写提交后跳转积分详情页面)
views.py
def edit(request,user_id):
user=get_object_or_404(User,pk=user_id) # 直接使用get_object_or_404来处理,调用get()
return render(request,'points/edit.html',{'user':user})
def submit(request,user_id):
user=get_object_or_404(User,pk=user_id)
user.points_set.create(value=request.POST['value'],deriver=request.POST['deriver']) # 使用id来取值
# return render(request,'points/detail.html',{'user':user})
return HttpResponseRedirect(reverse('points:detail', args=(user.id,))) # 使用重定向
在HttpResponseRedirect的构造函数中使用reverse()函数,避免在view的函数中硬编码,这里会返回字符串‘points/details/<user_id>’
urls.py
url(r'^edit/(?P<user_id>[0-9]+)$',views.edit,name='edit'),
url(r'^submit/(?P<user_id>[0-9]+)$',views.submit,name='submit'),
edit.html
<h1>{{ user.username }}</h1>
{% if error_message %}<p><strong>{{ error_message }}</strong></p>{% endif %}
<form action="{% url 'points:submit' user.id %}" method="post">
{% csrf_token %} <!--使用这个模板标签,Django处理跨域请求伪造的问题-->
<label for="value">积分</label><br />
<input type="number" name="value" id="value" /><br />
<label for="value">原因</label><br />
<input type="text" name="deriver" id="deriver" /><br />
<input type="submit" value="提交" />
</form>