Herramientas y librerías varias que utiliza el equipo de APSL para sus proyectos
Ninguno
A través de pip:
pip install git+https://github.com/APSL/django-apslutils.git
Añadir al fichero de requerimientos en modo desarrollador:
-e git+https://github.com/APSL/django-apslutils.git#egg=apslutils
Añadir la aplicación al settings.py
INSTALLED_APPS = (
...
'apslutils',
...
)
Descripción de las utilidades disponibles, separadas por ficheros.
daterange(start_date, end_date)
Permite hacer una interación entre dos fechas
EntreFechasField()
Campo para formularios. Muestra dos fechas. Fecha desde y fecha hasta.
BootstrapMixin()
Mixin para formularios. Coloca la clase form-control a todos los campos para tener compatibilidad con Bootstrap
MultiFieldBootstrap()
Sólo para django-crispy-forms. Componente del layout para visualizar campos múltiples, compatible con Bootstrap3.
Ejemplo:
helper.layout = Layout( "campo1", "campo2", MultiFieldBootstrap( u"Label del campo", "campo3", "campo4" ), )
ComboBoxFiltro()
Filtro para la administración. Substituye el típico filtro de lista por un combobox (select). Útil para FK muy extensos.
Añadir al list_filter con el siguiente formato:
list_filter = ('campo1', 'campo2', ('campo3', ComboBoxFiltro), )
ComboBoxCharFiltro
Igual que el filtro ComboBoxFiltro pero para campos que no sean de tipo ForeignKey.
RangoFechasFiltro()
Filtro para fechas desde y hasta. Además se muestra un combo para seleccionar sobre qué campo (tipo fecha) queremos aplicar el filtro.
Por ejemplo por si queremos filtrar por fecha desde y hasta de creación, o o fecha de recogida.
Uso:
Importación:
from apslutils.admin import RangoFechasFiltro
Creamos un nuevo objeto heredando del filtro
class FiltroReservaOld(RangoFechasFiltro):
filtro_tipos = (
('fecha_reserva', u'Fecha de reserva'),
('fecha_recogida', u'Fecha de recogida'),
)
Y usamos
list_filter = ('estado', FiltroReservaOld, 'asociado', )
MultiSelectorFiltro
Filtro multiselector configurable a partir de los atributos del modelo. Cada opción del selector se compone por:
- value: propiedad del modelo especificado en 'filter_by'
- texto: propiedad del modelo espicificado en 'parameter_name'
Por ejemplo, si queremos filtrar por el atributo 'codigo' y que los elementos del selector muestren el valor del atributo 'nombre' del modelo, se sobreescriben las siguientes variable:
filter_by = 'codigo' parameter_name = 'nombre'
Uso:
Importación:
from apslutils.admin import MultiSelectorFiltro
Creamos un nuevo objeto heredando del filtro
class MiFiltroMultiselector(MultiSelectorFiltro):
filter_by = 'codigo'
parameter_name = 'nombre'
Y usamos
list_filter = (MiFiltroMultiselector, 'atributo1', 'atributo2', )
subir_archivo(carpeta, fichero)
Método para ser utilizado en atributos upload_to de fields de tipo ImageField, FileField.
Permite una mejora organización de ficheros subidos, guardándolos en carpetas por fechas y haciendo slugify del nombre.
En el modelo:
from apslutils.models import subir_archivo
def img_finca(objeto, filename):
return subir_archivo('finca', filename)
imagen = models.ImageField(upload_to=img_finca)
traspaso_attrs_i18n(modelo_from, campo_from, modelo_to, campo_to)
Facilita el trabajo para traspasar atributos de un modelo al otro cuando es un campo de traducción.
Ejemplo de uso:
from apslutils.models import traspaso_attrs_i18n traspaso_attrs_i18n(modelorogien, "nombre", modelodestino, "nombrefull")
Recibe un formulario, y si no es válido, expulsa una lista de errores formatado para Bootstrap 3.
Uso dentro del template:
{% load apslutils %}
{% lista_errores form %}
Compara el módulo entre dos valores entre cero.
Uso:
{% load apslutils %}
{% if forloop.counter0|mod: 2 %}{% endif %}
Transforma fechas del tipo 2014-06-16T12:34:38.874Z a un obeto datetime.
Formulario compatibles con Metro UI (http://metroui.org.ua/forms.html).
Uso:
{% load apslutils %}
{% metro_form form %}
No es necesario añadir el tag form. El tt lo maqueta todo. Para configurar los parámetros del formulario es necesario heredaro del objeto MetroForm
from apslutils.forms import MetroForm
class MiForm(MetroForm, forms.Form):
...
metro_action = "login.html"
metro_method = "post"
Parámetros disponibles:
metro_action
defecto: "."
metro_method
defecto: "post"
metro_submit_value
defecto: "Submit"
Texto del botón de submit
metro_style
defecto: "default" valores permitidos: "default", "inline"
Con el estilo default el formulario se muestra con un formato vertical, donde el input está situado debajo del label. Con el estilo inline el formulario se muestra de forma horizontal.
metro_show_errors
defecto: True
También disponemos de algunos fields para brindar funcionalidades extras:
MetroDateField
Atributos:
- metro_locale
- metro_format
En static se encuentran recursos comunes, como pueden ser plugins de jquery
Plugin para modeltranslation. El resultado es parecido al que modeltranslation efectua dentro del admin de django, agrupando los campos traducibles en pestañas y añadiendo arriba un combo de cambio de idioma general.
Este plugin es compatible con bootstrap3 y se puede añadir en cualquier template donde haya un formulario.
Modo de uso:
Importar script: "{{STATIC_URL}}apslutils/js/jquery.i18nfields.js"
$(function() {
$('form').i18nfields({idioma_defecto: '{{LANGUAGE_CODE}}'});
});
Plugin para hacer un slugify en tiempo real. Por defecto lo hace del campo nombre hacia el slug.
Modo de uso:
Importar script: "{{STATIC_URL}}apslutils/js/jquery.slugify.js"
$(function() {
$('form').slugify();
});
En el fichero views.py añadimos distintos tipos de vistas genéricas que se utilizan a menudo.
Paquetes necesarios:
- django-crispy-forms
- django-tables2
- django-filter
Vista que junta funcionalidades de django-tables, django-filter y crispy. Modo de uso:
class MiClase(TablaFiltradaView): template_name = "nomre_plantilla" model = MiModelo table_class = MiModeloTable filter_class = MiModeloFilter formhelper_class = MiHelperDeCrispy
TablaFiltradaView()
En el directorio templates hay la carpeta crispyfangular. Contiene plantillas de crispy forms, modificadas para dar soporte a crispy forms y el paquete django-angular.
https://github.com/jrief/django-angular
Para utilizar dichas plantillas, colocar en el settings:
CRISPY_TEMPLATE_PACK = 'crispyfangular/bootstrap3'
ValidationFormMixin()
Es un mixin para validar formularios en tiempo real, a través de Ajax. Se añade el mixin a nuestro FormView.
class ContactoView(ValidationFormMixin, FormView):
pass
Al formulario le tenemos que añadir la clase validationForm.
...
Y añadir el siguiente javascript a nuestro site.
<script type="text/javascript" src="proxy.php?url=https%3A%2F%2Fgithub.com%2F%7B%7BSTATIC_URL%7D%7Dapslutils%2Fjs%2Fjquery.validationform.js"></script>