Como están?
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 originalfrom 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 originalfrom 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 originalfrom 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)