2010-01-23 13 views
2

probablement une question idiote, mais je ne suis pas sûr de savoir comment gérer ce 'correct'.django - comment enregistrer le formulaire (pas un modelForm)

J'ai une forme normale avec certains champs. Je peux insérer des données sans problèmes. Lorsque je veux modifier un enregistrement, j'utilise la fonction "model_to_dict" pour remplir le formulaire. Après avoir modifié un enregistrement, je veux l'enregistrer, et mes problèmes commencent ici.

Le document django indique qu'un modèle crée ou met à jour automatiquement l'enregistrement en fonction de la valeur PK. si la valeur pk existe, c'est une mise à jour, sinon un insert. J'ai donc créé cette fonction de sauvegarde:

def save(self, primary_key=0): 
    mymodel = Somemodel(pk=primary_key, 
     samplefield=self.cleaned_data['samplefield'], 
    ) 
    mymodel .save() 
    print 'PK:'+str(d.pk) 
    # Handle the MultipleChoiceField's 
    for x in self.cleaned_data['paymentMethod']: 
     x.mymodel_set.add(d) 

Donc, cela fonctionne très bien quand je modifier un enregistrement. Mais quand j'insère un nouvel enregistrement, il est bien inséré, mais mymodel.id = 0 ce qui signifie que je ne peux pas enregistrer les relations pour MultipleChoiceFields. Donc, je voudrais savoir si c'est un bon moyen de gérer cela? Et pourquoi mymodel.id = 0 après avoir enregistré le modèle?

Répondre

1

0 est un entier valide PK. Utilisez None à la place.

+0

Super ça marche! Merci beaucoup;) – Ben

0

Premièrement, pourquoi n'utilisez-vous pas ModelForm? C'est la bonne façon de gérer cette situation.

En réponse à votre question «pourquoi est le pk 0», c'est parce que vous l'avez explicitement mis à 0 si un PK n'est pas passé dans la fonction. Si vous ne voulez pas le définir sur 0, utilisez None comme valeur par défaut.

+0

Salut Daniel, J'utilise un formulaire normal parce que j'ai du mal à gérer des champs supplémentaires dans les relations many-to-many sur modelForms. – Ben

Questions connexes