2010-07-01 6 views
7

Disons que j'ai un formulaire pour ajouter/produits d'édition (avec le champ « utilisateur » étant une clé étrangère à mon utilisateur) déclenché à partir de deux vues distinctes fonctions - ajouter/modifier:Django étape form.save par étape

def product_add(request): 
    userprofile = UserProfile.objects.get(user=request.user) 
    if request.method == 'POST': 
     form = ProductAddForm(request.POST, request.FILES,) 
     if form.is_valid(): 
      form.save(user=request.user) 
    else: 
     form = ProductAddForm() 
    return render_to_response('products/product_add.html', { 
      'form':form, 'user':request.user, 
      }, context_instance=RequestContext(request)) 

def product_edit(request, id): 
    product = get_object_or_404(Product, id=id, user=request.user) 
    if product.user.id!=request.user.id: 
     raise Http404 
    if request.method == 'POST': 
     form = ProductAddForm(request.POST, request.FILES, instance=product) 
     if form.is_valid(): 
      form.save(user=request.user)    
    else: 
     form = ProductAddForm(instance=product) 
    return render_to_response('products/product_edit.html', { 
      'form':form, 'user':request.user, 
      }, context_instance=RequestContext(request)) 

méthode save de la forme se présente comme suit:

def save(self, user, *args, **kwargs): 
    self.instance.user = user       
    post = super(ProductAddForm, self).save(*args, **kwargs) 
    post.save() 

quelqu'un peut-il me dire ce qui se passe dans cette étape de méthode de sauvegarde par étape Pourquoi nous appelons super sur ce formulaire et quelle est la différence dans le traitement tout quand nous éditer et sauvegarder le nouveau produit si l'appel de fonction est le même?

+0

Avez-vous regardé docs.python.org pour voir ce que fait la fonction 'super'? http://docs.python.org/library/functions.html#super Qu'avez-vous appris là-bas? –

+0

Que voulez-vous dire par "éditer"? Voulez-vous dire "valider"? C'est une caractéristique distincte d'un formulaire. Ou voulez-vous dire autre chose? –

+0

Par "2 vues" voulez-vous dire "deux fonctions de vue"? Si oui, veuillez mettre à jour votre question avec toutes ces informations. Veuillez arrêter d'ajouter des commentaires. S'il vous plaît mettre à jour la question pour contenir tous les faits. Puis supprimez les commentaires. –

Répondre

3

self.instance.user = user

Enregistrez le argument utilisateur dans l'attribut utilisateur de l'objet self.instance

post = super (ProductAddForm, auto) .save (* args , ** kwargs)

Appelez la méthode de sauvegarde de superclasse pour obtenir un objet résultant.

post.save()

Enregistrer l'objet résultant. Cela peut être inutile, ou il peut être essentiel, selon les arguments à save.

Voir http://docs.djangoproject.com/en/1.2/topics/forms/modelforms/#the-save-method. Si commit est False, l'objet post n'a pas été enregistré dans la base de données.

Questions connexes