Je cherche des conseils/opinions sur la meilleure façon d'aborder la création d'un modèle de type dynamique en django.Django: Conseils pour la conception d'un modèle avec différents champs
La structure doit décrire les données pour les produits. Il y a environ 60 différents points de données possibles qui pourraient être pertinents, chaque Produit choisissant environ 20 de ces points (avec beaucoup de chevauchement) en fonction de son ProductType. Il y a environ 2 douzaines de ProductTypes différents, chaque ProductType appartenant à l'une des 6 catégories. La méthode évidente, mais désagréable, consisterait simplement à mettre tous les 100 points de données dans le modèle de produit, et à choisir et à ignorer tous les champs laissés vides. Avantage: c'est évident. Inconvénient: c'est moche, et si j'ai besoin d'ajouter plus de points de données, cela nécessite une mise à jour de la base de données.
Ma pensée est de rendre chaque produit complètement abstrait, et de définir seulement son type de produit, et quelques autres traits d'identification.
class Product(models.Model):
productType = models.ForeignKey(ProductType)
Je alors un des modèles distincts pour chaque type de point de données (nombre, texte, date, etc.), qui ressemblerait à ceci:
class TextData(models.Model):
fieldName = models.CharField(etc)
verboseName = models.CharField(etc)
data = models.CharField(etc)
product = models.ForeignKey(Product)
Enfin, je voudrais faire un modèle Cela définit quels types de données sont pertinents pour chaque type de produit, et ce que chaque point de données doit être appelé.
class ProductType(models.Model):
name = models.CharField(etc)
....
La question principale est la suivante: quelle serait la meilleure façon de remplir les champs pertinents pour un type de produit, quand ils peuvent être variant? Peut-être un autre modèle qui contient le nom/type d'un point de données, et un ManyToManyField entre ProductType et ce modèle? Un champ de texte avec XML? Un champ XML extérieur définissant la structure? Abandonner toute cette poursuite et aller avec quelque chose de mieux?
Merci pour toute aide!