2010-07-01 32 views
7

Digamos que tengo un formulario de añadido/productos de edición (con 'usuario' campo siendo una clave externa a mi usuario) desencadenó a partir de dos funciones de visualización distintos - añadir/editar:Django paso a paso 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)) 

método Save del formulario se ve de la siguiente manera:?

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

¿Puede alguien decirme lo que está pasando en esta etapa del procedimiento salvar a paso ¿por qué llamamos súper en este formulario y cuál es la diferencia en el procesamiento de todo cuando nos edite y guarde un nuevo producto si la llamada a la función es la misma?

+0

¿Has mirado docs.python.org para ver qué hace la función 'super'? http://docs.python.org/library/functions.html#super ¿Qué aprendiste allí? –

+0

¿Qué quiere decir con "editar"? ¿Te refieres a "validar"? Esa es una característica separada de un Formulario. ¿O quieres decir algo más? –

+0

¿Por "2 vistas" quiere decir "dos funciones de vista"? Si es así, ACTUALIZA tu pregunta con toda esta información. Por favor, DEJAR de agregar comentarios. Por favor, ACTUALIZA la pregunta para contener TODOS los hechos. Luego borre los comentarios. –

Respuesta

3

self.instance.user = usuario

Guardar el argumento de usuario en atributo de usuario del objeto self.instance

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

Invoque el método guardar superclase para obtener un objeto resultante.

post.save()

Guardar el objeto resultante. Esto puede ser innecesario, o puede ser esencial, según los argumentos del save.

Ver http://docs.djangoproject.com/en/1.2/topics/forms/modelforms/#the-save-method. Si la confirmación es False, el objeto post no se ha guardado en la base de datos.

Cuestiones relacionadas