Ho un modello dati fisso che ha molti campi dati.Come memorizzare coppie di chiavi arbitrarie nome/valore in un modello Django?
class Widget(Models.model): widget_owner = models.ForeignKey(auth.User) val1 = models.CharField() val2 = models.CharField() ... val568 = ...
Voglio racchiudere ancora più dati in questo Widget consentendo ai miei utenti di specificare campi dati personalizzati. Qual è un modo corretto per farlo? Sta memorizzando coppie nome/valore in cui l'utente può specificare ulteriori "campi widget" una buona idea? I miei pensieri sono al di sotto pseudo:
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()
quindi voglio lasciare che ogni utente a costruire un nuovo tipo di campo dati che si applica a tutti i loro widgets e quindi specificare i valori per ogni campo personalizzato in ciascun widget. Probabilmente dovrò fare il filtraggio/ricerca su questi campi personalizzati proprio come farei su un campo nativo (che presumo sarà molto più lento che operare su campi nativi). Ma la scala è di avere qualche dozzina di campi personalizzati per Widget e ogni utente avrà solo poche migliaia di widget nel proprio inventario. Probabilmente posso anche batch la maggior parte della ricerca/filtraggio sui campi personalizzati in uno script backend (forse)
Finché non è necessario ordinare o filtrare in base al valore degli attributi personalizzati, questa soluzione comporterà probabilmente meno mal di testa (e prestazioni migliori) rispetto ai modelli WidgetField e WidgetValue. Potrebbe essere ripulito facendo di puntelli un tipo di campo personalizzato che serializza automaticamente e deserializza se stesso in caricamento/salvataggio. –