0

我正在尝试更新一个对象,但我得到:“主键必须是唯一的”...... Entry 的模型:

    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

4 回答 4

1

好吧,也许在 form = EntryForm(request.POST, instance=entry) 行中,您没有指定实例参数,因为这是为了更新现有模型....

于 2009-02-02T15:30:11.543 回答
1

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

secondEntry = form.save(commit=False)
secondEntry.save()
于 2009-05-20T02:56:39.577 回答
0

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

于 2009-02-01T02:55:15.797 回答
0

form.save(force_update=True)

于 2009-04-21T19:32:27.050 回答