【发布时间】:2012-04-29 15:27:39
【问题描述】:
我需要一个允许创建或添加计划会话的表单
型号
class Session(models.Model):
tutor = models.ForeignKey(User)
start_time = models.DateTimeField()
end_time = models.DateTimeField()
表格
class SessionForm(forms.ModelForm):
class Meta:
model = Session
exclude = ['tutor']
视图呈现表单
def editor(request):
if request.method == 'GET':
if request.GET['id'] != '0':
# The user has selected a session
session = Session.objects.get(id=request.GET['id'])
form = SessionForm(instance=session)
else:
# The user wants to add a new session
form = SessionForm()
return render_to_response('planner/editor.html',
{'form': form,}, context_instance=RequestContext(request),)
模板editor.html
<form action="/planner/post" method="post">{% csrf_token %}
{{ form.as_p }}
</form>
查看以发布值
def post(request):
if request.method == 'POST':
form = SessionForm(request.POST)
if form.is_valid():
form.instance.tutor = request.user
form.save()
obj = {'posted': True}
return HttpResponse(json.dumps(obj), mimetype='application/json')
else:
return render_to_response('planner/editor.html',
form, context_instance=RequestContext(request),)
问题
会话总是被创建(从不更新)
问题
- 在我看来
post我怎么知道会话必须更新而不是创建? - 有没有办法简化这段代码?
【问题讨论】:
-
解决方案:将实例传递给表单,目前它没有什么可更新的。
-
这确实是个问题,但我怎样才能得到实际的实例呢?我是否必须手动将 id 添加到模板中?
-
您希望您的应用如何知道该做什么:创建新会话或编辑现有会话?我认为标准的解决方案是为这些使用不同的 URL。
-
编辑器或帖子的不同 URL ?我知道我的视图不知道是否必须创建会话。现在我想知道获取实际实例的最佳/简单方法。
标签: django django-models django-forms django-views