django - restar - lista de listas python
Django-Lista de diccionarios a tablas2 (2)
temo que soy un novato cuando se trata de Django.
Tengo una lista de diccionarios que quiero usar para completar una tabla Tables2 . No sé cómo adaptar la lista de Dicts para trabajar en Table2 :( El sitio web sugiere:
import django_tables2 as tables
data = [
{"name": "Bradley"},
{"name": "Stevie"},
]
class NameTable(tables.Table):
name = tables.Column()
table = NameTable(data)
No puedo resolver esto! Además, usaré esta vista con muchos conjuntos de datos diferentes y mis claves cambiarán de vista.
Aquí hay un ejemplo de una lista de diccionarios (tenga en cuenta que a continuación, los dos diccionarios tienen las mismas claves, esto siempre sucede en cada vista, es solo que en diferentes puntos de vista habrá diferentes conjuntos de claves):
[{''trial2_click'': u''left'', ''timeStored'': datetime.time(13, 35, 5), ''runOnWhatHardware'': u''bla'', ''id'': 1L, ''timeStart'': datetime.datetime(2012, 11, 2, 12, 54, 58, tzinfo=<UTC>), ''trial1_RT'': 234.1, ''approxDurationInSeconds'': 123L, ''timeZone'': u''UTC'', ''expt_id'': 2L, ''trial1_click'': u''right'', ''trial2_RT'': 2340L}, {''trial2_click'': u''left'', ''timeStored'': datetime.time(13, 39, 15), ''runOnWhatHardware'': u''bla'', ''id'': 2L, ''timeStart'': datetime.datetime(2012, 11, 2, 12, 54, 58, tzinfo=<UTC>), ''trial1_RT'': 234.1, ''approxDurationInSeconds'': 123L, ''timeZone'': u''UTC'', ''expt_id'': 2L, ''trial1_click'': u''right'', ''trial2_RT'': 2340L}, {''trial2_click'': u''left'', ''timeStored'': datetime.time(15, 32, 59), ''runOnWhatHardware'': u''bla'', ''id'': 3L, ''timeStart'': datetime.datetime(2012, 11, 2, 12, 54, 58, tzinfo=<UTC>), ''trial1_RT'': 234.1, ''approxDurationInSeconds'': 123L, ''timeZone'': u''UTC'', ''expt_id'': 4L, ''trial1_click'': u''right'', ''trial2_RT'': 2340L}]
Agradecería mucho la ayuda de cualquier persona :)
Cree una subclase de Table
para cada tipo de tabla que desee mostrar. Por tipo quiero decir conjunto de columnas . Por ejemplo:
import datetime
import django_tables2 as tables
[
{''trial2_click'': u''left'', ''timeStored'': datetime.time(13, 35, 5), ''runOnWhatHardware'': u''bla'', ''id'': 1L, ''timeStart'': datetime.datetime(2012, 11, 2, 12, 54, 58), ''trial1_RT'': 234.1, ''approxDurationInSeconds'': 123L, ''timeZone'': u''UTC'', ''expt_id'': 2L, ''trial1_click'': u''right'', ''trial2_RT'': 2340L},
{''trial2_click'': u''left'', ''timeStored'': datetime.time(13, 39, 15), ''runOnWhatHardware'': u''bla'', ''id'': 2L, ''timeStart'': datetime.datetime(2012, 11, 2, 12, 54, 58), ''trial1_RT'': 234.1, ''approxDurationInSeconds'': 123L, ''timeZone'': u''UTC'', ''expt_id'': 2L, ''trial1_click'': u''right'', ''trial2_RT'': 2340L},
{''trial2_click'': u''left'', ''timeStored'': datetime.time(15, 32, 59), ''runOnWhatHardware'': u''bla'', ''id'': 3L, ''timeStart'': datetime.datetime(2012, 11, 2, 12, 54, 58), ''trial1_RT'': 234.1, ''approxDurationInSeconds'': 123L, ''timeZone'': u''UTC'', ''expt_id'': 4L, ''trial1_click'': u''right'', ''trial2_RT'': 2340L}
]
class TrialTable(tables.Table):
trial2_click = tables.Column()
timeStored = tables.TimeColumn()
runOnWhatHardware = tables.Column()
timeStart = tables.DateTimeColumn()
trial1_RT = tables.Column()
approxDurationInSeconds = tables.Column()
timeZone = tables.Column()
expt_id = tables.Column()
trial1_click = tables.Column()
trial2_RT = tables.Column()
resolviendo mi propia Q, encontré aquí una forma de crear dinámicamente una clase en tiempo de ejecución:
Definición de una fábrica de modelos dinámicos El principio básico que nos permite crear clases dinámicas es el tipo de función incorporada (). En lugar de la sintaxis normal para definir una clase en Python:
clase Persona (objeto): nombre = "Julia" La función tipo () se puede usar para crear la misma clase, así es como se ve la clase de arriba usando el tipo () incorporado:
Persona = tipo ("Persona", (objeto,), {"nombre": "Julia"}) Usar tipo () significa que puede determinar programáticamente el número y los nombres de los atributos que componen la clase.
y mi código de trabajo:
def getTable(table_name):
cursor = connection.cursor()
try:
cursor.execute("""SELECT * FROM %s,%s;""" %(table_name,''subscription_exptinfo'')) # want autoincrement key?
exptData = dictfetchall(cursor)
except Exception, e:
''''
attrs = {}
cols=exptData[0]
for item in cols:
attrs[str(item)] = tables.Column()
myTable = type(''myTable'', (tables.Table,), attrs)
return myTable(exptData)
def dictfetchall(cursor):
"Returns all rows from a cursor as a dict"
desc = cursor.description
return [
dict(zip([col[0] for col in desc], row))
for row in cursor.fetchall()
]