Foros del Web » Programando para Internet » Python »

Ingresar multiples registros a mi BD con un solo form

Estas en el tema de Ingresar multiples registros a mi BD con un solo form en el foro de Python en Foros del Web. Buenas tardes tengo una cuestión que realizarles, mi caso es un poco especial, por así llamarlo. Requiero de un formulario que registre n cantidad de ...
  #1 (permalink)  
Antiguo 24/04/2015, 16:12
Avatar de alrvivas  
Fecha de Ingreso: febrero-2012
Ubicación: Sahuayo,Mich., México
Mensajes: 11
Antigüedad: 12 años, 2 meses
Puntos: 0
Pregunta Ingresar multiples registros a mi BD con un solo form

Buenas tardes tengo una cuestión que realizarles, mi caso es un poco especial, por así llamarlo.
Requiero de un formulario que registre n cantidad de productos a un modelo llamado SaldoAnterior esto para un control de inventario muy especifico donde se necesita comparar día a día el saldo anterior de todos los productos. ¿Alguna idea de como generar esto ?

este es mi código para ese modulo, y solo me guarda el ultimo producto con su cantidad

models.py

Código PHP:
from django.db import models
from producto
.models import Product

class SaldoAnterior(models.Model):
    
fecha_creacion models.DateTimeField(auto_now_add=True)
    
saldo_total models.DecimalField(max_digits=10decimal_places=3null=Trueblank=True)
    
saldo_totalpeso models.DecimalField(max_digits=10decimal_places=3null=Trueblank=True)

    
def __unicode__(self):
        return 
unicode(self.id)


class 
ProductoSaldo(models.Model):
    
saldomodels.ForeignKey(SaldoAnterior)
    
producto models.ForeignKey(Product)
    
cantidad models.DecimalField(max_digits=10decimal_places=3null=Trueblank=True)
    
linea_subtotal models.DecimalField(max_digits=10decimal_places=3null=Trueblank=True)
    
linea_subtotalpeso models.DecimalField(max_digits=30decimal_places=3null=Trueblank=True
forms.py

Código PHP:
# encoding:utf-8
from django import forms
from 
.models import *


class 
saldoanteriorForm(forms.ModelForm):
    class 
Meta:
        
model SaldoAnterior


class productosaldoForm(forms.ModelForm):
    class 
Meta:
        
model ProductoSaldo 
views.py


Código PHP:
from django.shortcuts import  render_to_responseredirect
from django
.template import RequestContext
from django
.contrib.auth.decorators import login_required
from django
.core.context_processors import csrf

from producto
.models import Product
from 
.models import ProductoSaldoSaldoAnterior
from cliente
.models import Cliente
from 
.forms import saldoanteriorFormproductosaldoForm

@login_required(login_url='/login/')
def add_producto_saldo(request):
    
producto Product.objects.order_by('categoria''orden')
    
saldo SaldoAnterior.objects.all()
    
producto_saldo ProductoSaldo.objects.all()
    if 
request.POST:
        
form productosaldoForm(request.POST)
        if 
form.is_valid():
            for 
item in producto:
                
producto_saldo form.save()
                
producto_saldo .producto item
                producto_saldo 
.save()
            return 
redirect('generacion-exitosa')
    else:
        
form productosaldoForm()
    
args = {}
    
args.update(csrf(request))
    
page_title "Capturar Productos"
    
template "add-producto-saldo.html"
    
return render_to_response(templatelocals(), context_instance=RequestContext(request))


@
login_required(login_url='/login/')
def crear_orden(request):
    
saldo SaldoAnterior.objects.all()
    if 
request.POST:
        
form saldoanteriorForm(request.POST)
        if 
form.is_valid():
            
saldo form.save(commit=False)
            
saldo .save()
            return 
redirect('add-producto-saldo')
    else:
        
form saldoanteriorForm()
    
args = {}
    
args.update(csrf(request))
    
page_title "Generar saldo"
    
template "generar-saldo.html"
    
return render_to_response(templatelocals(), context_instance=RequestContext(request)) 
de antemano muchas gracias por sus aportes
  #2 (permalink)  
Antiguo 27/04/2015, 10:47
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Ingresar multiples registros a mi BD con un solo form

Busca formsets y transacciones.
  #3 (permalink)  
Antiguo 28/04/2015, 14:21
Avatar de alrvivas  
Fecha de Ingreso: febrero-2012
Ubicación: Sahuayo,Mich., México
Mensajes: 11
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: Ingresar multiples registros a mi BD con un solo form

razpeitia gracias e intentado con formsets ( modelformset_factory e inlineformset_factory ) y e podido guardar n cantidad de registros pero me muestra todos los registros anteriores que e almacenado. y la idea es solo mostrar campos nuevos. si pudieras indicarme el camino o ejemplificarme te lo agradecería

view.py
Código PHP:
from django.forms.models import modelformset_factory  
def add_producto_saldo
(request): 
    
producto Product.objects.order_by('categoria''orden'
    
saldo SaldoAnterior.objects.all() 
    
ProductoSaldoFormSet modelformset_factory(ProductoSaldo)    
    if 
request.method == 'POST':
        
formset ProductoSaldoFormSet(request.POSTrequest.FILES)
        if 
formset.is_valid():
            
saldo formset.save(commit False)
            
saldo .save()
            return 
redirect('exito')
    else:
        
formset VentaProductoFormSet()
    
page_title "Capturar Productos" 
    
template "add-producto-saldo.html" 
    
return render_to_response(templatelocals(), context_instance=RequestContext(request)) 
add-producto-saldo.html
Código HTML:
<form method="post" action="">
   {% csrf_token %}
   {{ formset.management_form }}
    <table>
    {% for form in formset %}
        {{ form }}
    {% endfor %}
    </table>
    <button type="submit" id="comment-button" class="btn " name="_save">Continuar</button>
</form> 
  #4 (permalink)  
Antiguo 28/04/2015, 16:32
Avatar de alrvivas  
Fecha de Ingreso: febrero-2012
Ubicación: Sahuayo,Mich., México
Mensajes: 11
Antigüedad: 12 años, 2 meses
Puntos: 0
De acuerdo Respuesta: Ingresar multiples registros a mi BD con un solo form

Cita:
Iniciado por alrvivas Ver Mensaje
razpeitia gracias e intentado con formsets ( modelformset_factory e inlineformset_factory ) y e podido guardar n cantidad de registros pero me muestra todos los registros anteriores que e almacenado. y la idea es solo mostrar campos nuevos. si pudieras indicarme el camino o ejemplificarme te lo agradecería

view.py
Código PHP:
from django.forms.models import modelformset_factory  
def add_producto_saldo
(request): 
    
producto Product.objects.order_by('categoria''orden'
    
saldo SaldoAnterior.objects.all() 
    
ProductoSaldoFormSet modelformset_factory(ProductoSaldo)    
    if 
request.method == 'POST':
        
formset ProductoSaldoFormSet(request.POSTrequest.FILES)
        if 
formset.is_valid():
            
saldo formset.save(commit False)
            
saldo .save()
            return 
redirect('exito')
    else:
        
formset VentaProductoFormSet()
    
page_title "Capturar Productos" 
    
template "add-producto-saldo.html" 
    
return render_to_response(templatelocals(), context_instance=RequestContext(request)) 
add-producto-saldo.html
Código HTML:
<form method="post" action="">
   {% csrf_token %}
   {{ formset.management_form }}
    <table>
    {% for form in formset %}
        {{ form }}
    {% endfor %}
    </table>
    <button type="submit" id="comment-button" class="btn " name="_save">Continuar</button>
</form> 
Aprendiendo un poquito mas me di cuenta de que el modelformset_factory es el equivalente a objects.all() por lo cual me mandaba todos mis registros anteriores, por lo cual solucione solo modificando una sola linea

Código PHP:
from django.forms.models import modelformset_factory  
def add_producto_saldo
(request): 
    
producto Product.objects.order_by('categoria''orden'
    
saldo SaldoAnterior.objects.all() 
    
ProductoSaldoFormSet modelformset_factory(ProductoSaldo)    
    if 
request.method == 'POST':
        
formset ProductoSaldoFormSet(request.POSTrequest.FILES)
        if 
formset.is_valid():
            
saldo formset.save(commit False)
            
saldo .save()
            return 
redirect('exito')
    else:
        
formset VentaProductoFormSet(queryset=VentaProducto.objects.none())"""Aqui modifique"""
    
page_title "Capturar Productos" 
    
template "add-producto-saldo.html" 
    
return render_to_response(templatelocals(), context_instance=RequestContext(request)) 
Gracias razpeitia por orientarme

Etiquetas: django
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:17.