Foros Python

Versión completa: Ayuda con Python y Django sumar o restar stock
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Páginas: 1 2
hola gente antes melodiava el foro por temas de hacking hoy les vengo a pedir ayuda por un proyecto para la escuela

nuestro proyecto es hacerles una app para que puedan mantener el stock de la mercaderia que tienen

paso link de git en el rar esta todo..

https://github.com/Nashrc/conin-stock

y aqui pongo las imagenes de los codigos que nose como hacer

No tengo idea como hacer para que sume o reste el stock

yo creo que en la parte de las views es donde tengo que resolver el problema pero no se como

alguien me da una mano??

[Imagen: form.png]
[Imagen: models.png]
[Imagen: views.png]

desde ya muchas gracias
Hola, bienvenido.

No veo la necesidad de crear los campos "suma" y "resta" en el modelo productos. Si ya tenés el campo "cantidad", deberías crear otro ModelForm (similar al productosForm), pero solo mostrando el campo "cantidad" para que el usuario pueda editar ese valor.

Saludos
(01-11-2021, 12:55 PM)Francisco escribió: [ -> ]Hola, bienvenido.

No veo la necesidad de crear los campos "suma" y "resta" en el modelo productos. Si ya tenés el campo "cantidad", deberías crear otro ModelForm (similar al productosForm), pero solo mostrando el campo "cantidad" para que el usuario pueda editar ese valor.

Saludos

dale gracias por tu ayuda super agradecido porque no encuentro nadie que me oriente.. el tema es que no tengo idea como relacionarlas me ayudas?
aparte de cantidad algo mas ? id o que info tengo que poner. como prosigo despues de aver creado el modelForm?
Hola.

Después de crear el ModelForm deberías procesarlo en una vista, que será una vista muy parecida a las que ya tenés para tu productosForm. Tal vez te convenga primero hacer un tutorial de Django para tener los conceptos fundamentales y poder implementarlo por tus propios medios.

Saludos
(01-11-2021, 11:25 PM)Francisco escribió: [ -> ]Hola.

Después de crear el ModelForm deberías procesarlo en una vista, que será una vista muy parecida a las que ya tenés para tu productosForm. Tal vez te convenga primero hacer un tutorial de Django para tener los conceptos fundamentales y poder implementarlo por tus propios medios.

Saludos

dale gracias hasta ahroa pude modificar y eliminar.. asi que voy bien..

una duda si yo quiera que sume? en ves de modificar 

Código:
def modificar(request, id_prod):
    resultado= prod.objects.get(id_prod=id_prod)
    data = {
    'form':productosForm(instance = resultado )
    }

    if request.method == 'POST':
        form = productosForm(data=request.POST,instance=resultado)
        if form.is_valid():
            form.save()
            return redirect('stock:productos')

    return render(request, 'C:/conin/stock/templates/stock/modificar.html', data)


como creo ese campo que diga cantidad = cantidad + cantidad

si tenia 8 = 8 + 2 

y que lo guarde eso no entiendo.. saludos.
Hola.

Si querés que el usuario pueda editar el campo "cantidad", ese código ya te debería estar funcionando. Me parece que es la opción más rápida. Ahora, si necesitás que el usuario ponga la cantidad que quiere sumar o restar, entonces deberías crear un formulario común (no un ModelForm) con un campo de suma y uno de resta, luego obtener el número ingresado en el campo y sumarlo/restarlo al producto. Sería algo así:

  1. def modificar(request, id_prod):
  2. producto = prod.objects.get(id_prod=id_prod)
  3. data = {
  4. 'form': FormularioSumaResta()
  5. }
  6. if request.method == 'POST':
  7. form = FormularioSumaResta(request.POST)
  8. if form.is_valid():
  9. suma = form.cleaned_data["suma"]
  10. producto.cantidad += suma
  11. producto.save()
  12. return redirect('stock:productos')
  13.  
  14. return render(request, 'C:/conin/stock/templates/stock/modificar.html', data)


Ahí estaría considerando únicamente la suma, deberías hacer lo mismo con la resta, o tal vez usar un solo campo de texto y permitirle al usuario seleccionar si es suma o resta con algún otro widget.

Saludos
gracias por la info perdon pero soy muy nuevo.. lo de agregar a mano funciona pero queda mejor ocn el sumar y restar.. no entiendo mucho django me oriento como me explicas.. pero nose donde poner el resto de la infomacion realize esto 

en el views :
Código:
def modificar2(request, id_prod):
    producto = prod.objects.get(id_prod=id_prod)
    data = {
    'form': FormularioSumaResta()
    }
    if request.method == 'POST':
        form = FormularioSumaResta(request.POST)
        if form.is_valid():
            suma = form.cleaned_data["suma"]
            producto.cantidad += suma
            producto.save()
            return redirect('stock:productos')

    return render(request, 'C:/conin/stock/templates/stock/modificar2.html', data)

en la pagina para que me lleve a modificarlo :

Código:
{% block content %}
<tbody>
            <tr>Deposito:<br>
                {% for producto in productos %}
                <td>- id: {{producto.id_prod}}</td><br>
                <td>- producto: {{producto.producto}}</td><br>
                <td>- cantidad: {{producto.cantidad}}</td><br>
                <td>- <a href="modificar2.html/{{producto.id_prod}}">Modificar2</a>  </td><br>
                <td>- <a href="eliminar.html/{{producto.id_prod}}">eliminar</a>  </td><br><br>




                {% endfor %}

en el models:
Código:
from django.db import models



class productos(models.Model):
    id_prod = models.AutoField(primary_key=True,)
    producto = models.CharField(max_length=100)
    cantidad = models.IntegerField()
    vencimiento = models.CharField(max_length=10)
    observacion = models.CharField(max_length=100)
    sumar = models.IntegerField(default=0)
    restar = models.IntegerField(default=0)

en el form:
Código:
class FormularioSumaResta(forms.ModelForm):
    class Meta:
        model = productos
        fields = [
            'id_prod',
            'sumar',
            'restar',

]

        labels = {
            'id_prod' : 'Id_prod',
            'sumar': 'Sumar',
            'restar' : 'Restar',

        }

        widgets = {
            'id_prod' : forms.TextInput(attrs={'class':'form-control'}),
            'sumar' : forms.TextInput(attrs={'class':'form-control'}),
            'restar' : forms.TextInput(attrs={'class':'form-control'}),

        }
en las urls :
Código:
from django.urls import path


from . import views
app_name = "stock"

urlpatterns = [
    path('', views.index, name="index"),
    path('productos_list.html', views.productos, name="productos"),
    path('productos_add.html', views.agregar, name="Checkin"),
    path('modificar.html/<id_prod>/', views.modificar, name="modificar"),
    path('eliminar.html/<id_prod>/', views.eliminar, name="eliminar"),
    path('modificar2.html/<id_prod>/', views.modificar2, name="modificar2"),
    ]


de todo esto que tengo mal? o esta todo mal? Big Grin
Hola. No te preocupes, estamos para aprender. Smile

El formulario solo contendrá dos campos, suma y resta, así que no hay necesidad de que sea un ModelForm. Crealo como un formulario tradicional:

  1. class FormularioSumaResta(forms.Form):
  2. suma = forms.IntegerField()
  3. resta = forms.IntegerField()


El HTML para mostrar este formulario sería igual que el que estás usando para mostrar el ModelForm.

Saludos
perdon pero soy muy nuevo en esto o sea eso lo pongo en el form? y para que no me de error donde mas tendria que ponerlo? perdon por hacerte hacer casi mi trabajo pero soy muy novato!! y voy entendiendo de apoco las cosas Big Grin
Eso ponelo en tu forms.py, luego importalo en el views:

  1. from .forms import FormularioSumaResta


Y usalo en tu modificar2 como hiciste antes:

  1. def modificar2(request, id_prod):
  2. producto = prod.objects.get(id_prod=id_prod)
  3. data = {
  4. 'form': FormularioSumaResta()
  5. }
  6. if request.method == 'POST':
  7. form = FormularioSumaResta(request.POST)
  8. if form.is_valid():
  9. suma = form.cleaned_data["suma"]
  10. producto.cantidad += suma
  11. producto.save()
  12. return redirect('stock:productos')
  13.  
  14. return render(request, 'C:/conin/stock/templates/stock/modificar2.html', data)


En el modificar2.html deberías tener algo así:

Código:
<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
</form>

Saludos
Páginas: 1 2