Skip to content

APSL/django-apslutils

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

45 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

django-apslutils

Herramientas y librerías varias que utiliza el equipo de APSL para sus proyectos

Requerimientos

Ninguno

Instalación

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',
        ...
    )

Utilidades

Descripción de las utilidades disponibles, separadas por ficheros.

apslutils.fechas

daterange(start_date, end_date)

Permite hacer una interación entre dos fechas

apslutils.forms

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"
		),
	)

apslutils.admin

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', )

apslutils.models

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")

Templatetags

lista_errores

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 %}

mod

Compara el módulo entre dos valores entre cero.

Uso:

	{% load apslutils %}
	{% if forloop.counter0|mod: 2 %}{% endif %}

strtodate

Transforma fechas del tipo 2014-06-16T12:34:38.874Z a un obeto datetime.

metro_form

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

Fields

También disponemos de algunos fields para brindar funcionalidades extras:

MetroDateField

Atributos:

  • metro_locale
  • metro_format

Static

En static se encuentran recursos comunes, como pueden ser plugins de jquery

Javascripts

jquery.i18nfields

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}}'});
    });    

jquery.slugify

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();
    });  

Vistas

En el fichero views.py añadimos distintos tipos de vistas genéricas que se utilizan a menudo.

TablaFiltradaView

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

apslutils.views

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>

About

Herramientas y librerías varias que utiliza el equipo de APSL para sus proyectos

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors