2016-08-05 93 views
0

Ich möchte ein Ticket (Modell Ventas) mit seinen Produkten (Modell Venta_detalle)Wie 2 bildet mit Django in einer Ansicht speichern

Meine Modelle sind erstellen:

class Ventas(models.Model): 
    metodo_pago = models.CharField(max_length=80) 
    fecha = models.DateTimeField(auto_now_add=True,auto_now=False) 
    cajero = models.ForeignKey('auth.user') 
    cliente = models.ForeignKey(Clientes,blank=True,null=True) 
    total = models.DecimalField(max_digits=10,decimal_places=2) 


class Venta_detalle(models.Model): 
    venta = models.ForeignKey(Ventas) 
    producto = models.ForeignKey(Productos) 
    cantidad = models.IntegerField() 

    def __unicode__(self): 
     return self.producto.descripcion 


class Productos(models.Model): 
    codigo = models.CharField(max_length=80) 
    descripcion = models.TextField() 
    precio_compra = models.DecimalField(max_digits=10,decimal_places=2) 
    precio_venta = models.DecimalField(max_digits=10,decimal_places=2) 
    existencia = models.IntegerField() 
    impuesto = models.ForeignKey(Impuestos,blank=True,null=True) 
    imagen = models.ImageField(upload_to='productos') 

    def __unicode__(self): 
     return self.descripcion 

ich erstellen müssen Viele Venta_detalle Objekte mit einem Produkt, Menge und Ventas ID in der gleichen Vorlage.

Zum Beispiel: Wenn wir eine ObjectInline (admin.TabularInline) im Admin-Panel hinzufügen, um zwei Modelle mit Fremdschlüssel anzuzeigen.

Meine Ansicht nur haben:

def VentasCrear(request): 

    if request.method == "POST":   
     form = VentaForm(request.POST) 
     if form.is_valid(): 
      venta = form.save(commit=False) 
      venta.cajero = request.user 
      venta.save() 
    else: 
     form = VentaForm() 

    return render(request, 'ventas.html', {'form': form}) 

Antwort

1

"? Wie 2 bildet mit Django in einer Ansicht speichern"

In Ihrem GET Sie initialisieren Ihre Formulare mit Präfixen:

venta_form = VentaForm(prefix='venta_form')  
venta_detalle_form = VentaDetalleForm(prefix='venta_detalle_form') 
context = { 'venta_form' : venta_form, 'venta_detalle_form' : venta_detalle_form } 
return render(request, 'ventas.html', context) 

Dann in Ihrem POST:

venta_form = VentaForm(request.POST, prefix='venta_form') 
venta_detalle_form = VentaDetalleForm(request.POST, prefix='venta_detalle_form') 

und los gehts.

1

En español: Veo que lo que quieres es guardar una sola Venta y en ella Guardar muchos detalles de esa venta, como los Sohn los poductos y eso. Como lo tienes esta bien pero le falta una parte, en la vista seria de esta forma

Ich lerne auch Python & Django, aber ich denke, was Sie wollen, ist ein einziges Verkauf zu speichern und in speichern viele viele Details dieses Verkaufs, wie zum Beispiel Productos. Sie sind auf dem richtigen Weg, aber hier ist, wie Sie die Ansicht ändern.

def VentasCrear (Anfrage):

if request.method == "POST": 
    # cuando llega el formulario los recibimos con sus respectivos prefijos (prefix) asi: 
    #primero el formulario de Ventas  
    form = ventaform(request.POST, prefix="venta_form") 
    #ahora recibimos el formulario de los detalles 
    form2 = venta_detalle_form(reques.POST, prefix="venta_detalle_form") 
    if form.is_valid() and form2.is_valid(): # si los formularios son validos 
     venta = form.save(commit=False) 
     venta.cajero = request.user 
     venta.save() 
     # en este punto ya tienes la ventaguardada ahora procedes con los detalles  
     detalle = form2.save(commit=False) 
     detalle.venta = venta # esta es la llave foranea de lo que guardamos arriba 
     detalle.save() 
else: # este se cumpliria si es un GET 
    formventa = ventaform(prefix="venta_form") 
    formdetalle = venta_detalle_form(prefix="venta_detalle_form") 
    context = { 'form' : formventa, 'form2' : formdetalle } 

return render(request, 'ventas.html', context)