pjmakey2

Untitled

Jul 15th, 2020
357
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. form_[lo_que_repsenta]_select = function() {
  2.     //Selecciones el elemento select segun el name en el mismo
  3.     //en este ejemplo el tag select seria
  4.     //<select name="cliente" class="form-control"></select>
  5.     $('select[name=cliente]').select2({
  6.     //Titulo
  7.         placeholder: '$TITULO$',
  8.     //El ancho
  9.         width: '100%',
  10.     //A partir de cuento empezara a buscar en el backend
  11.         minimumInputLength: 5,
  12.         ajax: {
  13.         //A cual url llamaremos para traer los datos
  14.         //Por defecto es el url get_jsonmodel, que sabe como llamar los datos de los modelos
  15.         //Pero estos antes tienen que estar definidos en sales_man.format_cache en el metodo model_keyfiels de la clase FormatCache
  16.         // Que esta en sales_man->format_cache.FormatCahce.model_keyfiels
  17.         // Es decir si tienes un metodo en cualquiera de los paquetes, ya sea.
  18.         // -> sales_man
  19.         // -> imp_man
  20.         // -> dashboard
  21.         // -> warehouse_man
  22.         // -> ... etc etc
  23.         // Si quieres traerlo mediante get_jsonmodel lo tienes que definier en format_cache en el metodo model_keyfiels
  24.         // Sopongamos el modelo UserProfile que  esta en el paquete dashboard
  25.         // El modelo es el siguiente.
  26.         // class UserProfile(model.models):
  27.         //       cedula = models.CharField(max_length=120)
  28.         //       nombrefantasia = models.CharField(max_length=120)
  29.         //       nombrefactura = models.CharField(max_length=120)
  30.         //       ... etc etc
  31.         // Como ven este modelo tiene muchisimos atributos
  32.         // Estos atributos los podemos definir en format_cache de la siguiente manera.
  33.         //  'dashboard': {'fields': ['cedula', 'nombrefantasia']}
  34.         //
  35.         // A su vez si el modelo tiene metodos, por ejemplo un metodo para acortar el nombre
  36.         //
  37.         // class UserProfile(model.models):
  38.         //       cedula = models.CharField(max_length=120)
  39.         //       nombrefantasia = models.CharField(max_length=120)
  40.         //       nombrefactura = models.CharField(max_length=120)
  41.         //       ... etc etc
  42.         //       def get_nombrecorto(self):
  43.         //           return self.nombrefantasia[0:10]
  44.         //
  45.         // En el ejemplo anterior se acorta el nombre a 10 caracteres.
  46.         // Este metodo tambien podemos definirlo en format_cache, mediante la llave methods
  47.         //  'userprofile': {'fields': ['cedula', 'nombrefantasia'],
  48.         //                'methods': ['get_nombrecorto'] }
  49.         // De esta forma el metodo estara disponible para nuestro uso en el front-end
  50.         //
  51.         // Tambien el modelo puede que tenga ForeignKeys
  52.         //
  53.         // class UserProfile(model.models):
  54.         //       cedula = models.CharField(max_length=120)
  55.         //       nombrefantasia = models.CharField(max_length=120)
  56.         //       nombrefactura = models.CharField(max_length=120)
  57.         //       userobj = models.ForeignKey('User')
  58.         //       ... etc etc
  59.         //       def get_nombrecorto(self):
  60.         //           return self.nombrefantasia[0:10]
  61.         //
  62.         // Obviamente ese ForeignKey tambien tiene sus propios atributos, que tambien
  63.         // mediante definicion en el format_cache podemos acceder
  64.         //
  65.         //  'userprofile': {'fields': ['cedula', 'nombrefantasia'],
  66.         //                'methods': ['get_nombrecorto'],
  67.         //                'foreign_fields': ['userobj__username','userobj__password']
  68.         //               }
  69.         //  
  70.         // Entonces tambien tendremos disponibles los ForeignKeys en el front-end
  71.         //
  72.         // Ahora, que pasa si nuestro modelo es tan grande y no queres definir todos los atributos
  73.         //  o queres hacer una definicion independiente de la habitual
  74.         // Es cuestion de nombrar la llave de otra forma, obviamente es buena practica tener como prefijo
  75.         // el nombre del modelo en minusculas
  76.         //
  77.         // En el siguiente ejemplo vemos la definicion del anterior 'userprofile' y otro que llamamos 'userprofile_lite'
  78.         // En donde el segunto no tiene definido los metodos y el nombre fantasia
  79.         //
  80.         //  'userprofile': {'fields': ['cedula', 'nombrefantasia'],
  81.         //                'methods': ['get_nombrecorto'],
  82.         //                'foreign_fields': ['userobj__username','userobj__password']
  83.         //               }
  84.         //  'userprofile_lite': {'fields': ['cedula'],
  85.         //                'foreign_fields': ['userobj__username','userobj__password']
  86.         //               }
  87.         //
  88.         // Entonces lo definido en format_cache, es lo que utilizamos en "model_key"
  89.  
  90.             url: '{% url "get_jsonmodel" %}',
  91.             data: function (params) {
  92.                 var query = {
  93.                     'key_name': 'salamanca', //Llave para que el servidor sepa que es una fuenta no maliciosa
  94.                     'app_name': 'finance_man',  //nombre del paquete donde esta el modelo
  95.                     'model_name': 'UserProfile', //Como se llama el modelo, tal cual como esta en models.py
  96.                     'model_key': 'userprofile_lite', //definicion en format_cache (un modelo puede tener varias definiciones), tal cual como esta en format_cache
  97.             // despues de esto, lo que se define son atributos para query
  98.             // por ejemplo abajo ponemos que solo queremos traer los aprobados
  99.             // esto depende de los atributos del modelo
  100.                     'aprobado_050': 1,
  101.             //aqui decimos que busque en los atributos nombrefantasia o clientecod
  102.             // OJO: Los atributos del modelo son nombrefantasia y clientecod
  103.             //      Osea si abres models.py y te vas al modelo veras solamente como atributos lo dicho arriba
  104.             //      or_ = Es una condicionante del sistema para hacer queries tipo OR
  105.             //      __icontains = Es una condicionante del sistema para hacer queries tipo like
  106.                     'or_nombrefantasia__icontains': params.term,
  107.                     'or_clientecod__icontains': params.term
  108.                 };
  109.                 return query;
  110.             },
  111.         //Procesamos los datos recibidos para mostrarlos en el select2
  112.         // Siempre los datos recibidos son una array
  113.         //Siguiendo el ejemplo de UserProfile si buscamos por ejemplo pedroleguizamon, y tienendo en cuenta que estamos
  114.         // usando la definicion userprofile_lite, eL servidor nos enviara
  115.         //
  116.         // [{'_id': 8989898,
  117.         //   'cedula': 2463986,
  118.         //   'userobj__username': 'pedroleguizamon',
  119.         //   'userobj__password': 'df7n21k18978'
  120.         //   }]
  121.         //
  122.         // En cambio si utilizamos la definicion userprofile, nos devolvera
  123.         // [{'_id': 8989898,
  124.         //   'cedula': 2463986,
  125.         //   'nombrefantasia': 'Miers Leguizamon, Pedro Julian',
  126.         //   'userobj__username': 'pedroleguizamon',
  127.         //   'userobj__password': 'df7n21k18978',
  128.         //   'get_nombrecorto':  'Miers Legu'
  129.         //   }
  130.         // ]
  131.         // FIJESE como siempre trae el atributo "_id", este es el PRIMARY KEY del modelo
  132.             processResults: function (data) {
  133.                 sdata = [];
  134.         //Parseamos (convertimos) a un objecto el json
  135.                 dataj = JSON.parse(data);
  136.         //Lo iteramos
  137.                 for (idx in dataj) {
  138.                     sdobj = dataj[idx];
  139.             //Pontemos los atributos que vamos a utilizar para que los muestre en el select2
  140.                     cliente = sdobj.nombrefantasia + '[' + sdobj.cedula + ']';
  141.                     sdata.push({id: sdobj.cedula, text: cliente});
  142.                 }
  143.         //Devolvemos los resultados.
  144.         //Cuando pruebas esto
  145.         //Utiliza siempre console.log para ir viendo lo que hace el sistema
  146.                 return {results: sdata};
  147.             }
  148.         }
  149.     });
  150. }
  151. //Llamamos a nuestro metodo para que ejecute en el DOM (investigar que es el DOM en html/javascript/programacion web)
  152. form_[lo_que_repsenta]_select();
Add Comment
Please, Sign In to add comment