Django - ModelForm创建或更新? [英] Django - ModelForm Create or Update?

查看:223
本文介绍了Django - ModelForm创建或更新?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要一个表单,允许在计划中创建或添加会话



模型



  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.method =='GET':
如果request.GET ['id']!='0':
#用户选择了一个会话
session = Session.objects.get(id = request.GET ['id'])
form = SessionForm(instance = session)
else:
#用户想添加一个新的session
form = SessionForm()
return r ender_to_response('planner / editor.html',
{'form':form,},context_instance = RequestContext(request),)



Template editor.html



 < form action = / planner / postmethod =post> {%csrf_token%} 
{{form.as_p}}
< / form>



查看以发布价值



  def post(request):
如果request.method =='POST':
form = SessionForm(request.POST)
如果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 我如何知道会话必须更新而不是创建?

  • 有没有办法简化这段代码?


解决方案

如果要更新se您需要在绑定窗体时提供实例。



如果表单有效,则可以保存 commit = False 更新导师。

  form = SessionForm(instance = instance,data = request.POST)
如果form.is_valid ():
instance = form.save(commit = False)
instance.tutor = request.user
instance.save()
pre>

I need to have a form that allows the creation or addition of sessions on a planning

Model

class Session(models.Model):
    tutor = models.ForeignKey(User)
    start_time = models.DateTimeField()
    end_time = models.DateTimeField()

Form

class SessionForm(forms.ModelForm):
    class Meta:
        model = Session
        exclude = ['tutor']

View to render the form

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),)

Template editor.html

<form action="/planner/post" method="post">{% csrf_token %}
{{ form.as_p }}
</form>

View to post the values

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),)

Problem

Sessions are always created (never updated)

Questions

  • In my view post how do I know that the session must be updated and not created ?
  • Is there a way to simplify this code ?

解决方案

If you want to update a session, you need to provide the instance when you bind the form.

If the form is valid, you can then save with commit=False, and update the tutor.

form = SessionForm(instance=instance, data=request.POST)
if form.is_valid():
    instance = form.save(commit=False)
    instance.tutor = request.user
    instance.save()

这篇关于Django - ModelForm创建或更新?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆