试图更新表格,它插入!

时间:2009-02-01 00:40:04

标签: 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,
      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()更新对象,而是尝试插入它...任何想法?

4 个答案:

答案 0 :(得分:1)

好吧也许就行了 form = EntryForm(request.POST,instance = entry) 你没有指定一个intance参数,因为这是为了更新一个现有的模型....

答案 1 :(得分:1)

您的第一个form.save(False)生成一个填充了表单数据的Entry对象,因此您应该再次保存Entry对象而不是表单。

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

  

form.save(force_update = TRUE)