Foros del Web » Programando para Internet » Python »

[SOLUCIONADO] Nuevas columnas en modelos de Django

Estas en el tema de Nuevas columnas en modelos de Django en el foro de Python en Foros del Web. Hola todos, soy parcialmente nuevo en django. Tengo una duda: Si quiero que el usuario final pueda añadir columnas a una tabla, como lo logro? ...
  #1 (permalink)  
Antiguo 10/12/2013, 17:20
Avatar de stormearth  
Fecha de Ingreso: octubre-2013
Ubicación: Quito
Mensajes: 68
Antigüedad: 10 años, 6 meses
Puntos: 2
Nuevas columnas en modelos de Django

Hola todos, soy parcialmente nuevo en django. Tengo una duda:

Si quiero que el usuario final pueda añadir columnas a una tabla, como lo logro?
Es decir, el usuario escribiría el nombre de la "Actividad" y pondría "añadir", y yo debo encargarme de que los nuevos datos que se guarden en esa actividad vayan a parar a una nueva columna dentro de la tabla "Actividades".

Sé que se puede utilizar South para migrar bases de datos y eso, pero es normal hacerlo cada vez que el usuario añada una actividad? Y cómo lo haría?.

Tal vez no es una práctica correcta de django y estoy perdido en esto, cualquier respuesta será bienvenida!

Si pueden incluir un link de referencia para leer más sobre el asunto les agradecería! Saludos.
  #2 (permalink)  
Antiguo 11/12/2013, 10:25
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Nuevas columnas en modelos de Django

No se que es lo que tratas de lograr, pero estoy seguro que no lo estas haciendo bien.

Si quieres campos arbitrarios puedes hacer esto.

Código Python:
Ver original
  1. class MyModel(models.Model):
  2.     pass
  3.  
  4. class MyFields(models.Model):
  5.     INTEGER = 'I'
  6.     DECIMAL = 'D'
  7.     DATE = 'F'
  8.     # ...
  9.     TYPE_CHOICES = (
  10.         (INTEGER, 'Integer'),
  11.         (DECIMAL, 'Decimal'),
  12.         (DATE, 'Date'),
  13.         # ...
  14.     )
  15.     value = models.CharField()
  16.     name = models.CharField(max_lenght=100)
  17.     type = models.CharField(max_lenght=100, choices=TYPE_CHOICES)
  18.     fk = models.ForeingKey(MyModel)

Lo unico que te encargarías es validar dependiendo el tipo. Y poner un indice único entre la fk y el nombre (y opcionalmente el tipo), para no tener llaves repetidas.
  #3 (permalink)  
Antiguo 11/12/2013, 19:45
Avatar de stormearth  
Fecha de Ingreso: octubre-2013
Ubicación: Quito
Mensajes: 68
Antigüedad: 10 años, 6 meses
Puntos: 2
Respuesta: Nuevas columnas en modelos de Django

Que tal Razpetia gracias por tu respuesta. Tal vez no fui muy claro. Lo que quiero hacer es una funcionalidad parecida (bastante más simple) a esta, te incluyo un screenshot:



El usuario escribiría un título y una descripción y luego iría llenando la base de datos. En la base de datos cada fila corresponde a un día y cada columna a una "actividad". Entonces lo que quiero hacer es que los usuarios puedan añadir actividades. No se como coger el nombre que el usuario escriba en "titulo", no sé qué código debo añadir a views.py y/o a models.py de tal manera que lo que el usuario escriba en "titulo" termine siendo una nueva columna en la base de datos. Sin tener que usar el comando syncdb porque claro, el usuario no puede escribir "manage.py syncdb".

Tal vez estoy perdido aca en ese caso cualquier orientación será agradecida. Tal vez no es una buena práctica dejar al usuario añadir nuevas columnas a la base datos y más bien guardar las cosas en diccionarios. .. bueno, eso es todo.
  #4 (permalink)  
Antiguo 11/12/2013, 20:30
 
Fecha de Ingreso: mayo-2012
Ubicación: Mexico
Mensajes: 82
Antigüedad: 11 años, 11 meses
Puntos: 7
Respuesta: Nuevas columnas en modelos de Django

Hola, aqui tienes lo que necesitas:

https://docs.djangoproject.com/en/1....neric-editing/
  #5 (permalink)  
Antiguo 12/12/2013, 09:31
Avatar de Carlangueitor
Moderador ლ(ಠ益ಠლ)
 
Fecha de Ingreso: marzo-2008
Ubicación: México
Mensajes: 10.037
Antigüedad: 16 años, 1 mes
Puntos: 1329
Respuesta: Nuevas columnas en modelos de Django

No, definitivamente es mala práctica dejar que el usuario modifique el esquema de la base de datos, y más aún por que Django usa su ORM y tendrías que modificar los modelos.

razpeitia ya te dio una solución sencilla, pero podrías hacer un modelo que sea wrapper para cada campo que necesites y foreing keys.


Saludos
__________________
Grupo Telegram Docker en Español

Etiquetas: django, modelos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 10:54.