2010-07-01 16 views
7

Diciamo che ho un modulo per aggiungere/prodotti di editing (con il campo di 'user' essere una chiave esterna al mio utente) innescato da due funzioni distinte di visualizzazione - aggiungere/modificare:Django passo dopo passo form.save

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

metodo Save del modulo si presenta come segue:?

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

qualcuno può dirmi cosa sta succedendo in questo passaggio metodo save per passo Perché chiamiamo eccellente in questa forma, e qual è la differenza, in tutto elaborazione quando abbiamo modificare e salvare un nuovo prodotto se la chiamata di funzione è la stessa?

+0

Hai guardato docs.python.org per vedere cosa fa la funzione 'super'? http://docs.python.org/library/functions.html#super Che cosa hai imparato lì? –

+0

Cosa intendi con "modifica"? Intendi "convalidare"? Questa è una caratteristica separata di un modulo. O intendi qualcos'altro? –

+0

Per "2 visualizzazioni" intendi "due funzioni di visualizzazione"? In tal caso, AGGIORNA la tua domanda con tutte queste informazioni. Si prega di smettere di aggiungere commenti. Per favore AGGIORNA la domanda per contenere TUTTI i fatti. Quindi elimina i commenti. –

risposta

3

self.instance.user = user

Salva l'argomento utente in attributo utente dell'oggetto self.instance

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

Invoca il metodo di salvataggio della superclasse per ottenere un oggetto risultante.

post.save()

Salva l'oggetto risultante. Questo potrebbe essere inutile, o potrebbe essere essenziale, a seconda degli argomenti a save.

Vedere http://docs.djangoproject.com/en/1.2/topics/forms/modelforms/#the-save-method. Se commit è False, l'oggetto post non è stato salvato nel database.

Problemi correlati