Tengo un modelo de datos fijo que tiene muchos campos de datos.¿Cómo almacenar pares de claves de nombre/valor arbitrarios en un modelo de Django?
class Widget(Models.model): widget_owner = models.ForeignKey(auth.User) val1 = models.CharField() val2 = models.CharField() ... val568 = ...
quiero meter aún más datos en este Widget al permitir que mis usuarios especifican campos de datos personalizados. ¿Cuál es una manera sensata de hacer esto? ¿Es una buena idea almacenar pares de nombre/valor donde el usuario puede especificar "campos de widget" adicionales? Mis pensamientos son seudo continuación:
data_types = ('free_text', 'date', 'integer', 'price') class CustomWidgetField(models.Model) owner = ForeignKey(auth.User) field_title = models.CharField(auth.User) field_value_type = models.CharField(choices = data_types) class CustomWidgetValue(models.Model) field_type = ForeignKey(CustomWidgetField) widget = ForeignKey(Widget) value = models.TextField()
por lo que quiero dejar que cada usuario construir un nuevo tipo de campo de datos que se aplicará a la totalidad de sus widgets y luego especifique los valores para cada campo personalizado en cada widget. Probablemente tendré que hacer el filtrado/búsqueda en estos campos personalizados de la misma manera que lo haría en un campo nativo (que supongo que será mucho más lento que operar en campos nativos). Pero la escala es para tener unas pocas docenas de campos personalizados por Widget y cada Usuario solo tendrá unos miles de Widgets en su inventario. Puedo también, probablemente, la mayor parte del lote de búsqueda/filtrado en los campos personalizados en un script backend (tal vez.)
Mientras que no es necesario para ordenar o filtro basado en el valor de los atributos personalizados, esta solución supondrá probablemente menos dolor de cabeza (y un mejor rendimiento) que los modelos WidgetField y WidgetValue. Podría limpiarse haciendo que los accesorios sean un tipo de campo personalizado que se serializa automáticamente y se deserializa en la carga/guardado. –