Добрый день!

Разговор идет о магазине. Имеется модель Product. Клиенту требуется динамика полей. Возможность создавать свойства продукции самому. Возможные типы свойств: текстовое поле, выборка из существующих значений(одиночная и множественная).

Подойдет ли решение, если создать отдельные модели для каждой вариации, т.е.

(примерно)

class Property(Model):
    "Свойства"
    FIELD = (
        (1, 'CharField'),
        (2, 'SelectField'),
        (3, 'MultiSelectField'),
    )
    name = CharField(max_length=255, verbose_name='Наименование')
    field = PositiveSmallIntegerField(choices=FIELD, verbose_name='Тип поля')

class PropertyOption(Model):
    "Значения свойств(Select и MultiSelect)"
    property = ForeignKey(Property, verbose_name='Свойство')
    option = CharField(max_length=255, verbose_name='Значение')

class ProductValue(Model):
    "Значение свойства для продукции(Текстовое поле)"
    product = ForeignKey(Product, verbose_name='Продукция')
    property = ForeignKey(Property, verbose_name='Свойство')
    value = CharField(max_length=255, verbose_name='Значение')


class ProductValueOption(Model):
    "Значение свойства для продукции(Select и MultiSelect)"
    product = ForeignKey(Product, verbose_name='Продукция')
    option = ForeignKey(PropertyOption, verbose_name='Значение')

Сильно ли это повлияет на выгрузку данных? Правильно ли вообще так реализовывать проект с точки зрения архитектуры? Подскажите более грамотные решения.

Используется MySQL. Продукции будет не более 1000 наименований.

Еще думал, может использовать настоящую динамику. Создать модель полей для Product, потом через миграции синхронизировать ее с таблицей, но пока не особо разобрался как это реализовать. И как следить за целостностью

Заранее благодарю за потраченное вами время