Пытаясь обновить форму, он делает вставку! - PullRequest
0 голосов
/ 01 февраля 2009

Я пытаюсь обновить объект, но получаю: «первичный ключ должен быть уникальным» ... Модель для 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))

Итак, я печатаю оба идентификатора, и они одинаковы: 1. Это должно заставить form.save () обновить объект, но вместо этого он пытается вставить его ... любая идея?

Ответы [ 4 ]

1 голос
/ 20 мая 2009

Ваш первый form.save (False) создает объект Entry, заполненный данными из формы, поэтому вы должны сохранить этот объект Entry вместо формы снова.

secondEntry = form.save(commit=False)
secondEntry.save()
1 голос
/ 02 февраля 2009

ну может в линию form = EntryForm (request.POST, instance = entry) Вы не указываете параметр intance, потому что он предназначен для обновления существующей модели ....

0 голосов
/ 21 апреля 2009

form.save (force_update = True)

0 голосов
/ 01 февраля 2009

Почему у вас есть form.save () дважды? Возможно, в этом проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...