Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/07/2015, 09:54
MatyD
 
Fecha de Ingreso: septiembre-2012
Mensajes: 17
Antigüedad: 11 años, 7 meses
Puntos: 0
Comprobar registro en una App de django y enviar a otra app desde un fromulario!

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 original
  1. from django.db import models
  2.  
  3.  
  4. # Create your models here.
  5. class Client(models.Model):
  6.     dni_cuit = models.CharField(max_length=11, unique=True)
  7.     first_name = models.CharField(max_length=20)
  8.     last_name = models.CharField(max_length=20)
  9.     email = models.EmailField(blank=True, null=True)
  10.     phone = models.CharField(max_length=15)
  11.     address = models.CharField(max_length=40, blank=True, null=True)
  12.     points = models.IntegerField(default=1)
  13.     timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
  14.  
  15.     def __str__(self):
  16.         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
  1. from django import forms
  2. from .models import Client
  3.  
  4.  
  5. # Formulario chequear si cliente existe
  6. class CheckClientForm(forms.Form):
  7.     dni_cuit = forms.CharField()
  8.  
  9.  
  10. # Formulario crear cliente
  11. class NewClientForm(forms.ModelForm):
  12.  
  13.     class Meta:
  14.         model = Client
  15.         fields = ['dni_cuit',
  16.                   'first_name',
  17.                   'last_name',
  18.                   'email',
  19.                   'address',
  20.                   ]
  21.  
  22.     def clean_dni_cuit(self):
  23.         dni_cuit = self.cleaned_data.get('dni_cuit')
  24.         return dni_cuit
  25.  
  26.     def clean_first_name(self):
  27.         first_name = self.cleaned_data.get('first_name')
  28.         return first_name
  29.  
  30.     def clean_last_name(self):
  31.         last_name = self.cleaned_data.get('last_name')
  32.         return last_name
  33.  
  34.     def clean_email(self):
  35.         email = self.cleaned_data.get('email')
  36.         return email
  37.  
  38.     def clean_address(self):
  39.         address = self.cleaned_data.get('address')
  40.         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
  1. from django.shortcuts import render
  2.  
  3. from .forms import NewClientForm, CheckClientForm
  4. from .models import Client
  5.  
  6.  
  7. # Create your views here.
  8. def home(request):
  9.     title = "Clientes"
  10.     queryset = Client.objects.all()
  11.  
  12.     context = {
  13.                "title": title,
  14.                "queryset": queryset,
  15.               }
  16.     return render(request, "clients/home.html", context)
  17.  
  18.  
  19. def addclient(request):
  20.     title = "Zona Clientes"
  21.     form = NewClientForm(request.POST or None)
  22.     context = {
  23.                "title": title,
  24.                "form": form
  25.               }
  26.  
  27.     if form.is_valid():
  28.         instance = form.save(commit=False)
  29.         instance.save()
  30.         # Las 2 lineas anteriores pueden obviarse si solo queremos guardar
  31.         # los datos sin hacer nada con ellos con la siguiente linea
  32.         # form.save()
  33.  
  34.         context = {
  35.                    "title": "Cliente Añadido - Gracias",
  36.         }
  37.  
  38.     return render(request, "clients/addclient.html", context)
  39.  
  40.  
  41. # Chequeamos si el cliente existe y en caso de existir redireccionamos a
  42. # Nueva orden de trabajo, y si no existe a Nuevo Cliente!
  43. def checkclient(request):
  44.     title = "Comprobar Cliente"
  45.  
  46.     # Si no hay una variable GET para chequear DNI mostrar formulario para
  47.     # ingresar el DNI del cliente
  48.     if not request.GET:
  49.         form = CheckClientForm(request.GET or None)
  50.         context = {
  51.                    "title": title,
  52.                    "form": form,
  53.                   }
  54.         return render(request, "clients/checkclient.html", context)
  55.     # Si hay una variable GET procedemos a hacer el chequeo del cliente
  56.     else:
  57.         dni_cuit = request.GET['dni_cuit']
  58.         # Revisamos si el cliente existe y direccionamos a crear orden
  59.         try:
  60.             client = Client.objects.get(dni_cuit=dni_cuit)
  61.             context = {
  62.                        "client": client
  63.                       }
  64.  
  65.             return render(request, "workorder/home.html", context)
  66.         # Si el cliente NO existe enviamos a agregar nuevo cliente
  67.         except:
  68.             context = {
  69.                        "dni_cuit": dni_cuit
  70.                       }
  71.             print("El CLIENTE NO EXISTE EN LA BD!!!")
  72.             return render(request, "clients/addclient.html", context)