2010-07-01 16 views
7

Lassen Sie uns sagen, ich habe ein Formular zum Hinzufügen/Bearbeiten von Produkten (mit dem Feld ‚Benutzer‘ einen Fremdschlüssel zu meinem Benutzer ist) ausgelöst aus zwei separaten Ansichtsfunktionen - add/edit:Django form.save Schritt für Schritt

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

die sieht save-Methode des Formulars:

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

Kann mir jemand sagen, was für Schritt in diesem speichern Verfahrensschritt passiert Warum Super nennen wir auf diesem Formular und was ist der Unterschied in der gesamten Verarbeitung, wenn wir Bearbeiten und speichern Sie ein neues Produkt, wenn der Funktionsaufruf gleich ist?

+0

Haben Sie docs.python.org angeschaut, um zu sehen, was die 'super'-Funktion macht? http://docs.python.org/library/functions.html#super Was hast du dort gelernt? –

+0

Was meinst du mit "bearbeiten"? Meinst du "validieren"? Das ist ein separates Feature eines Formulars. Oder meinst du etwas anderes? –

+0

Mit "2 Ansichten" meinst du "zwei Ansichtsfunktionen"? Wenn ja, bitte aktualisieren Sie Ihre Frage mit all diesen Informationen. Bitte beende das Hinzufügen von Kommentaren. Bitte aktualisieren Sie die Frage, um alle Fakten zu enthalten. Löschen Sie dann die Kommentare. –

Antwort

3

self.instance.user = user

Speichern der Benutzer-Argument in das Benutzerattribut des self.instance Objekt

post = Super (ProductAddForm, Selbst-) .save (* args , ** kwargs)

Rufen Sie die superclass save-Methode auf, um ein resultierendes Objekt zu erhalten.

post.save()

Speichern Sie das resultierende Objekt zurück. Dies kann, abhängig von den Argumenten zu save, überflüssig sein oder wesentlich sein.

Siehe http://docs.djangoproject.com/en/1.2/topics/forms/modelforms/#the-save-method. Wenn das Festschreiben Falsch ist, wurde das Objekt post nicht in der Datenbank gespeichert.

Verwandte Themen