Tengo un problema que no consigo solucionar. Lo que quiero lograr es lo siguiente.
Tengo primero que nada un modelo de Clientes
client/models.py
Código Python:
Ver original
from django.db import models # Create your models here. class Client(models.Model): dni_cuit = models.CharField(max_length=11, unique=True) first_name = models.CharField(max_length=20) last_name = models.CharField(max_length=20) email = models.EmailField(blank=True, null=True) phone = models.CharField(max_length=15) address = models.CharField(max_length=40, blank=True, null=True) points = models.IntegerField(default=1) timestamp = models.DateTimeField(auto_now_add=True, auto_now=False) def __str__(self): return self.dni_cuit
Teniendo en cuenta esto lo que necesito hacer es chequear si un cliente existe en la base de datos utilizando su DNI_CUIT, ahora bien para esto he creado un formulario para enviar por GET a la misma vista el dni_cuit
client/forms.py
Código Python:
Ver original
from django import forms from .models import Client # Formulario chequear si cliente existe class CheckClientForm(forms.Form): dni_cuit = forms.CharField() # Formulario crear cliente class NewClientForm(forms.ModelForm): class Meta: model = Client fields = ['dni_cuit', 'first_name', 'last_name', 'email', 'address', ] def clean_dni_cuit(self): dni_cuit = self.cleaned_data.get('dni_cuit') return dni_cuit def clean_first_name(self): first_name = self.cleaned_data.get('first_name') return first_name def clean_last_name(self): last_name = self.cleaned_data.get('last_name') return last_name def clean_email(self): email = self.cleaned_data.get('email') return email def clean_address(self): address = self.cleaned_data.get('address') return address
Perfecto hasta ahí! el formulario me carga el mismo template pero me envía el valor dni_cuit por GET y puedo comprobar sin problema si el cliente existe o no a través de un if else
Y AHORA SURGE EL PROBLEMA QUE NO PUEDO SOLUCIONAR
"No se como hacer para que cuando haga clic el boton Comprobar DNI/CUIT del formulario me envíe a la vista addclient si el cliente NO existe, o que me envíe a la vista addorder de la app work_order en caso de que el cliente SI exista en la barra de direcciones siempre me mantengo en /clients/checkclient/ aunque me renderiza las otras páginas pero obviametne sin los formularios y demás datos obtenidos de cada view en particular"
Lo que tengo que hacer es si el cliente existe que me derive a la vista "addclient"
Si no existe a la app work_order view "addorder"
este es el archivo completo views.py de la app client
Código Python:
Ver original
from django.shortcuts import render from .forms import NewClientForm, CheckClientForm from .models import Client # Create your views here. def home(request): title = "Clientes" queryset = Client.objects.all() context = { "title": title, "queryset": queryset, } return render(request, "clients/home.html", context) def addclient(request): title = "Zona Clientes" form = NewClientForm(request.POST or None) context = { "title": title, "form": form } if form.is_valid(): instance = form.save(commit=False) instance.save() # Las 2 lineas anteriores pueden obviarse si solo queremos guardar # los datos sin hacer nada con ellos con la siguiente linea # form.save() context = { "title": "Cliente Añadido - Gracias", } return render(request, "clients/addclient.html", context) # Chequeamos si el cliente existe y en caso de existir redireccionamos a # Nueva orden de trabajo, y si no existe a Nuevo Cliente! def checkclient(request): title = "Comprobar Cliente" # Si no hay una variable GET para chequear DNI mostrar formulario para # ingresar el DNI del cliente if not request.GET: form = CheckClientForm(request.GET or None) context = { "title": title, "form": form, } return render(request, "clients/checkclient.html", context) # Si hay una variable GET procedemos a hacer el chequeo del cliente else: dni_cuit = request.GET['dni_cuit'] # Revisamos si el cliente existe y direccionamos a crear orden try: client = Client.objects.get(dni_cuit=dni_cuit) context = { "client": client } return render(request, "workorder/home.html", context) # Si el cliente NO existe enviamos a agregar nuevo cliente except: context = { "dni_cuit": dni_cuit } print("El CLIENTE NO EXISTE EN LA BD!!!") return render(request, "clients/addclient.html", context)