Django 尝试更新表单时会执行插入操作!

Django 尝试更新表单时会执行插入操作!,django,django-forms,Django,Django Forms,我试图更新一个对象,但我得到了:“主键必须是唯一的”。。。进入模式: class Entry(models.Model): title = models.CharField(max_length=250) author = models.ForeignKey(User, editable=False) status = models.IntegerField(choices=data_types.STATUS_CHOICES, defaul

我试图更新一个对象,但我得到了:“主键必须是唯一的”。。。进入模式:

    class Entry(models.Model):
      title = models.CharField(max_length=250)
      author = models.ForeignKey(User, editable=False)
      status = models.IntegerField(choices=data_types.STATUS_CHOICES,
      default = data_types.STATUS_DRAFT)
以及以下观点:

@login_required
def edit_entry(request, entry_id='0'):
  message = ""
  entry = get_object_or_404(Entry.objects, pk=entry_id)
  if request.method == 'GET':
    form = EntryForm(instance=entry)
  else :
    if request.method == 'POST':
      if request.POST['submit'] == 'Edit':
        print "entry id: %s" % entry.id
        form = EntryForm(request.POST, instance=entry)
        if form.is_valid():
            secondEntry = form.save(False)
            print "second entry id: %s" % secondEntry.id
            form.save()
            message = "entry updated"
        else:
            message = 'There were errors'
  return render_to_response(
        'myadmin/edit_entry.html',
         { 'entryForm':form,'message': message}, 
         context_instance=RequestContext(request))
所以我打印了两个ID,它们是一样的:1。这会使form.save()更新对象,但它会尝试插入它。。。有什么想法吗?

为什么要使用form.save()两次?也许这就是问题所在。

嗯,也许是在排队 form=EntryForm(request.POST,instance=entry) 您不需要指定intance参数,因为这是用于更新现有模型

保存(强制更新=True)

您的第一个form.save(False)生成一个条目对象,其中填充了表单中的数据,所以您应该保存该条目对象,而不是再次保存表单

secondEntry = form.save(commit=False)
secondEntry.save()

请在您的问题中添加类EntryForm的定义。