Desde Yaco nos traen las aplicaciones pluggables django-inlinetrans y django-inplaceedit que permiten editar traducciones de templates y objetos de nuestros modelos desde el frontend de nuestro proyecto.
Una vez instalada en nuestro proyecto, django-inlinetrans nos permitirá realizar traducciones inline. Para ello basta con reemplazar los tags de traducción de nuestras plantillas:
{% trans "Hola" %}
por el templatetag itrans:
{% itrans "Hola" %}
De esta forma podremos editar las traducciones de nuestras plantillas directamente desde el frontend de nuestro proyecto.
Por su parte django-inplaceedit nos permitirá editar los campos de nuestros modelos reemplazando sus ocurrencias en nuestras plantillas por el tag inplace_edit. Por ejemplo:
{{ content.description|safe }}
Tendría que ser reemplazado por:
{% inplace_edit "content.description|safe" %}
django-inplaceedit no sólo nos permite editar campos de texto si no que también soporta la edición de choices, campos booleanos, campos de fecha ó fecha y hora, foreingkeys, relaciones many-to-many, campos de archivo y de imagen, todo ello in-place desde el frontend de nuestro proyecto.
Ambas aplicaciones se pueden ver en acción en el siguiente vídeo:
Publicado por Antonio Melé el Miércoles 11 d Enero d 2012 | 4 comentarios | Categorías: aplicaciones, internacionalización, modelos, pluggables
Mitch Fournier explica en su blog cómo importar datos en formato CSV a un modelo de Django, tal cómo lo ha utilizado en su proyecto Wantbox.com.
Primero creamos un modelo que contenga los mismos campos que el archivo CSV que queramos importar, utilizando el tipo de campo más adecuado para cada uno de ellos dependiendo de si sus valores van a ser cadenas de texto, números, fechas... Aquí tenemos un ejemplo de archivo CSV:
ZIPCODE, CITY, STATECODE, STATENAME
02111, BOSTON, MA, MASSACHUSETTS
02481, WELLESLEY HILLS, MA, MASSACHUSETTS
05819, ST. JOHNSBURY, VT, VERMONT
...
Creamos el modelo que nos sirva para almacenar los datos:
import datetime
class ZipCode(models.Model):
zipcode = models.CharField(max_length=5)
city = models.CharField(max_length=64)
statecode = models.CharField(max_length=2)
statename = models.CharField(max_length=32)
create_date = models.DateTimeField(default=datetime.datetime.now)
def __unicode__(self):
return "%s, %s (%s)" % (self.city, self.statecode, self.zipcode)
class Meta:
ordering = ['zipcode']
Después creamos un script que utilizaremos para importar los datos, podemos llamarlo load_data.py. El script incluirá la ruta de nuestro archivo CSV y de nuestro proyecto para utilizar sus settings. En el script leeremos las líneas del archivo CSV y crearemos una instancia de nuestro modelo por cada línea para después guardarla en la base de datos.
# ruta a nuestro archivo CSV
csv_filepathname="/home/usuario/zipcodes.csv"
# ruta a nuestro proyecto de django
your_djangoproject_home="/home/usuario/projects/mi_proyecto/"
import sys,os
sys.path.append(your_djangoproject_home)
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
# importamos nuestro modelo
from zips.models import ZipCode
import csv
dataReader = csv.reader(open(csv_filepathname), delimiter=',', quotechar='"')
for row in dataReader:
if row[0] != 'ZIPCODE': # ignoramos la primera línea del archivo CSV
zipcode = ZipCode()
zipcode.zipcode = row[0]
zipcode.city = row[1]
zipcode.statecode = row[2]
zipcode.statename = row[3]
zipcode.save()
Este script también nos sirve para importar datos de archivos TSV de Excel cambiando la línea de dataReader por:
dataReader = csv.reader(open(csv_filepathname), dialect='excel-tab')
De esta forma podemos importar nuestros datos en formato CSV o TSV a nuestros proyecto django. También podemos crear un management command específico para ello en lugar utilizar un script independiente.
Publicado por Antonio Melé el Miércoles 12 d Octubre d 2011 | 2 comentarios | Categorías: modelos, trucos, tutorial
django-transmeta es una aplicación reusable que nos permite añadir traducciones a los campos de nuestros modelos. Es muy fácil de utilizar ya que crea automáticamente un campo en la base de datos por cada atributo traducible y cada idioma de nuestro setting LANGUAGES.
Así, si tenemos un campo llamado nombre y nuestro setting LANGUAGES son inglés y español django-transmeta creará los campos nombre_es, nombre_en en la base de datos y al acceder directamente a atributo nombre obtendremos la traducción correspondiente al idioma que esté activo en la petición.
Para usar django-transmeta tenemos que añadir un atributo __metaclass__ a los modelos que tengan campos con traducciones y en la clase Meta del modelo añadiremos el atributo translate en el que tendremos que incluir la lista de campos que permiten ser traducidos. Valga como ejemplo el siguiente modelo en el que los campos con traducción serán description y body:
from transmeta import TransMeta
class Book(models.Model):
__metaclass__ = TransMeta
title = models.CharField(max_length=200)
description = models.TextField()
body = models.TextField(default='')
price = models.FloatField()
class Meta:
translate = ('description', 'body', )
Al añadir nuevos idiomas o marcar nuevos campos como traducibles django-transmeta se ocupa de detectar qué tablas faltan en la base de datos para crearlas. Para ello basta utilizar el siguiente comando tras haber modificado cualquier modelo:
./manage.py sync_transmeta_db
Otra ventaja es que django-transmeta muestra todos los campos de idiomas en el sitio de administración de Django de forma transparente, permitiendo editar todos los idiomas desde el Admin.
Publicado por Antonio Melé el Lunes 14 d Febrero d 2011 | 7 comentarios | Categorías: aplicaciones, internacionalización, modelos, pluggables
Askani es una interfaz gráfica para generar modelos de Django. Álvaro Mouriño nos cuenta que lleva trabajando algo más de un mes en este proyecto. Askani está desarrollado en javascript y permite definir de forma gráfica modelos, campos, métodos y opciones meta en un estilo bastante similar a UML. Resulta útil para tener una representación más gráfica de los modelos y generar su código automáticamente.
El código fuente de Askani está publicado en github por lo que cualquiera puede contribuir a mejorar el software o crear su propio fork.
Publicado por Antonio Melé el Sábado 27 d Noviembre d 2010 | 0 comentarios | Categorías: comunidad, modelos
Suscríbete a nuestro feed RSS y al feed de la comunidad para estar al tanto de todo lo que ocurre entorno a Django.
Tú también puedes escribir en éste blog. Para hacerlo basta con que nos digas sobre qué quieres escribir un artículo relacionado con Django.
Utilizar un formulario para modificar 2 modelos
Descubriendo objetos similares por sus etiquetas