2009-02-01 8 views
0

Je suis en train de mettre à jour un objet, mais je suis obtenir: « clé primaire doit être unique » ... Le modèle d'entrée:Essayer de mettre à jour un formulaire fait une insertion!

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) 

Et la vue:

@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)) 

Donc, j'imprime les deux ID et ils sont les mêmes: 1. Cela devrait faire form.save() mettre à jour l'objet, mais à la place, il essaie de l'insérer ... une idée?

+0

Veuillez ajouter la définition de la classe EntryForm à votre question. – akaihola

Répondre

0

Pourquoi avez-vous deux fois formSave()? C'est peut-être le problème.

1

Eh bien peut-être dans la ligne forme = EntryForm (request.POST, instance = entrée) vous ne spécifiez un paramètre intance, car ceci est pour mettre à jour un modèle existant ....

forme
0

. save (force_update = True)

1

Votre premier fichier form.save (False) génère un objet Entry rempli avec les données du formulaire. Vous devez donc enregistrer à nouveau cet objet Entry à la place du formulaire.

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