我正在尝试更新一个对象,但我得到:“主键必须是唯一的”......条目的模型:
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()更新对象,而是尝试插入它...任何想法?
答案 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)