Django – ¿diseñando modelos con campos virtuales?

Me gustaría preguntar sobre el enfoque más elegante cuando se trata de diseñar modelos con campos virtuales como los que se muestran a continuación en Django …

Digamos que estamos construyendo una tienda en línea y todos los productos en el sistema están definidos por el modelo ” Producto “.

class Product(models.Model): # common fields that all products share name = ... brand = ... price = ... 

Pero la tienda tendrá muchos tipos de productos que no están relacionados entre sí, por lo que necesito alguna forma de almacenar esos campos virtuales de diferentes tipos de productos (es decir, la capacidad de un reproductor de MP3, el número de páginas de un libro, …).

Las soluciones que podría encontrar con mis habilidades de Django en bruto están lejos de ser perfectas hasta ahora:

¿Cuál es su opinión sobre esto?

TIA.

Los productos tienen características.

 class Feature( models.Model ): feature_name = models.CharField( max_length=128 ) feature_value = models.TextField() part_of = models.ForeignKey( Product ) 

Como eso.

Sólo una lista de características.

 p= Product( "iPhone", "Apple", 350 ) p.save() f= Feature( "mp3 capacity", "16Gb", p ) f.save() 

Si lo desea, puede tener una lista maestra de nombres de funciones en una tabla separada. No sobre-analizar las características. Usted no puede hacer ningún procesamiento en ellos. Todo lo que haces es presentarlos.

Ruby on Rails tiene un campo “serializado” que le permite empaquetar un diccionario en un campo de texto. Quizás DJango ofrezca algo similar?

Este artículo tiene una implementación de un SerializedDataField.

Personalmente, me gustaría ir con la respuesta de S. Lott. Sin embargo, es posible que desee crear un campo JSON personalizado:

http://svn.navi.cx/misc/trunk/djblets/djblets/util/fields.py

http://www.djangosnippets.org/snippets/377/

Ve con la herencia. Crea Produce subclases con sus propios campos adicionales.