Django - ModelForm 创建还是更新?

标签 django django-models django-forms django-views

我需要一个表格,允许在计划中创建或添加 session

型号

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']

呈现表单的 View

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

问题

session 始终被创建(从不更新)

问题

  • 在我看来post我如何知道 session 必须更新而不是创建?
  • 有没有办法简化这段代码?

最佳答案

如果要更新 session ,则需要在绑定(bind)表单时提供实例。

如果表格有效,您可以 save使用commit=False,并更新导师。

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

关于Django - ModelForm 创建还是更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10205657/

相关文章:

python - Django 模型 - 将附加信息传递给经理

python - djangoviews.py-显示正整数文本值

python - 使用 modelformset_factory 时如何区分 django 中的表单集?

python - Django 为生产重置自动增量 pk/id 字段

python - Django迁移ForeignKey到IntegerField不丢数据的迁移策略

python - 使用单选小部件从模型选择字段中删除 "---------"

django - 带有复选框的表单中的manytomany字段在django模板中安装了选择字段

Django - 数据库支持的 session 和基于 Cookie 的 session 之间的区别?

python - Django 1.8+ 扩展用户模型

django objects.get() 找不到结果