rom django.db import models
from django import forms
import datetime
class Articulo(models.Model):
nombre = models.CharField(max_length=40, verbose_name='Nombre')
marca = models.CharField(max_length=30)
modelo = models.CharField(max_length=30)
cantidad = models.SmallIntegerField(default=0, verbose_name='Cantidad')
observaciones = models.TextField(max_length=80)
ingreso = models.SmallIntegerField(default=0, verbose_name='Ingreso')
egreso = models.SmallIntegerField(default=0, verbose_name='Egreso')
fecha_modificacion = models.DateTimeField(auto_now=True, verbose_name='Fecha modificacion')
@property
def subtotal(self):
return self.cantidad + self.ingreso
def __str__(self):
return "%s %s %s %s" % (self.nombre, self.marca, self.cantidad, self.ingreso)
class CompraArticulo(models.Model):
fecha_compra = models.DateTimeField(auto_now=True, verbose_name='Fecha compra', null=True)
persona = models.CharField(max_length=40, verbose_name='Persona', null=True)
articulo = models.ForeignKey("Articulo", null=True, blank=True, on_delete=models.CASCADE)
#def __str__(self):
# return "%s %s %s" % (self.articulo, self.persona, self.fecha_compra)
VIEWS.PY
from django.shortcuts import render, redirect
from django.template import RequestContext
from django.http import HttpResponse
from django.views.generic.base import TemplateView
from django.views.generic import CreateView, ListView, DeleteView
from django.views.generic.detail import DetailView
from django.views.generic.edit import UpdateView
from .models import *
from .forms import *
from django.urls import reverse_lazy
from django.core.paginator import Paginator
from django.db.models import Q
# Create your views here.
class ArticuloNuevoView(CreateView):
model = Articulo
form_class = ArticuloForm
template_name = 'Articulo/articulonuevo.html'
success_url = reverse_lazy('listado_articulos')
class ArticuloEdicionView(TemplateView):
template_name = "Articulo/articuloedicion.html"
class ListarArticulo(ListView):
model = Articulo
form_class = ArticuloForm
paginate_by = 10
template_name = 'articulo/listado_articulos.html'
class ComprarArticulo(UpdateView):
model = CompraArticulo
form_class = CompraForm
template_name_suffix = '_update_form'
success_url = reverse_lazy('listado_articulos')
def form_valid(self, form):
response = super().form_valid(form)
form.instance.cantidad += form.instance.ingreso
form.instance.ingreso = 0
form.instance.save()
return response
class ListarCompras(ListView):
model = CompraArticulo
form_class = ArticuloForm
paginate_by = 10
template_name = 'articulo/listado_compras.html'
class EgresoArticulo(UpdateView):
model = Articulo
form_class = EgresoForm
template_name_suffix = '_update_form'
success_url = reverse_lazy('listado_articulos')
def form_valid(self, form):
response = super().form_valid(form)
form.instance.cantidad -= form.instance.ingreso
form.instance.ingreso = 0
form.instance.save()
return response
def modificar(request, id):
articulo = Articulo.objects.get(id=id)
data = { 'form': FormularioSumaResta() }
if request.method == 'POST':
form = FormularioSumaResta(request.POST)
if form.is_valid():
suma = form.cleaned_data["suma"]
#Chequeo que si usuario ingresa numero negativo, sea siempre positivo
if suma < 0:
suma *= -1
articulo.cantidad += int(suma)
articulo.save()
success_url = reverse_lazy('listado_articulos')
else:
form = FormularioSumaResta()
return render(request, 'articulo/compra_articulo.html', data)
FORMS.PY
from django import forms
from .models import *
from django.db import models
class ArticuloForm(forms.ModelForm):
class Meta:
model = Articulo
fields = [
'nombre',
'marca',
'modelo',
'cantidad',
'observaciones',
'ingreso',
'egreso',
]
class CompraForm(forms.ModelForm):
articulo = forms.CharField(disabled=True)
#marca = forms.CharField(disabled=True)
ingreso = forms.CharField(max_length=80)
persona = forms.CharField(disabled=True)
class Meta:
model = CompraArticulo
fields = ['articulo', 'ingreso', 'persona']
class ListadoCompras(forms.ModelForm):
class Meta:
model = CompraArticulo
fields = ['persona']
class EgresoForm(forms.ModelForm):
nombre = forms.CharField(disabled=True)
marca = forms.CharField(disabled=True)
modelo = forms.CharField(disabled=True)
class Meta:
model = Articulo
fields = ['nombre', 'marca', 'modelo', 'ingreso']
class FormularioSumaResta(forms.ModelForm):
class Meta:
model = Articulo
fields = ['nombre']
suma = forms.IntegerField()
#resta = forms.IntegerField()
Hola,
Dos cosas:
1. El artículo no debería ser requerido?
2. Yo lo haría con dos componentes: Un modelo de compra y uno de venta.
Fijate que django tiene la funcionalidad de agregación de datos
(aggregate), de esa forma podés obtener los distintos cálculos
cada vez que cargas una compra o una venta en la db y guardar ese
dato en el artículo.
--
--
Ha recibido este mensaje porque está suscrito a Grupo "Grupo de Usuarios del Framework Django de habla hispana" de Grupos de Google.
Si quieres publicar en este grupo, envía un mensaje de correo
electrónico a djan...@googlegroups.com
Para anular la suscripción a este grupo, envíe un mensaje a django-es-...@googlegroups.com
Para obtener más opciones, visita este grupo en http://groups.google.com.bo/group/django-es.
---
Has recibido este mensaje porque estás suscrito al grupo "Django-es" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a django-es+...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/django-es/7c3765a5-3660-4ad2-a044-39c2607d140bn%40googlegroups.com.