Python 如何以正确的方式在Django中为在线商店设计产品及其功能(选项)的模型?

Python 如何以正确的方式在Django中为在线商店设计产品及其功能(选项)的模型?,python,django,database,django-models,Python,Django,Database,Django Models,我正在尝试自己创建网上商店(只是一个培训项目)。有产品模型、功能模型和产品功能模型。 产品可能有不同的功能(每个新产品可能有从零到无限的规格)和不同的值(所以我需要一些灵活的解决方案)。不同产品的功能名称可以相同(例如颜色或尺寸) 简而言之:用户选择现有选项或添加新选项,然后设置此功能的值。利润) “我的要素模型”仅存储选项的名称。我创建ProductFeature是为了将产品与功能连接起来并设置值。 起初看起来还可以。但在管理面板中,用户可以访问ProductFeature中的所有对象(名称值

我正在尝试自己创建网上商店(只是一个培训项目)。有产品模型、功能模型和产品功能模型。 产品可能有不同的功能(每个新产品可能有从零到无限的规格)和不同的值(所以我需要一些灵活的解决方案)。不同产品的功能名称可以相同(例如颜色或尺寸)

简而言之:用户选择现有选项或添加新选项,然后设置此功能的值。利润)

“我的要素模型”仅存储选项的名称。我创建ProductFeature是为了将产品与功能连接起来并设置值。 起初看起来还可以。但在管理面板中,用户可以访问ProductFeature中的所有对象(名称值)。看起来有点混乱

在“管理”面板中是否有隐藏新产品现有选项的变体(仅保留向ProductFeature添加新数据库记录)?或者可能有任何其他变体来设计模型和连接

class Product(models.Model):
    name = models.CharField(max_length=300, verbose_name='Название товара')
    description = models.TextField(verbose_name='Описание товара', blank=True)
    main_category = TreeForeignKey(
        Category,
        on_delete=models.CASCADE,
        related_name='main_products',
        verbose_name='Основная категория'
    )
    main_image = models.ImageField(verbose_name='Изображение', null=True, blank=True)
    features = models.ManyToManyField(
        'ProductFeature',
        related_name='product',
        verbose_name='Характеристики',
        blank=True
    )
    created = models.DateTimeField(auto_now_add=True, verbose_name='Дата создания')
    updated = models.DateTimeField(auto_now=True, verbose_name='Дата изменения')


class Feature(models.Model):
    name = models.CharField(max_length=300, verbose_name='Название характеристики', unique=True)
    category = models.ManyToManyField(Category, related_name='features', verbose_name='категории')
    post_fix = models.CharField(max_length=15, verbose_name='Постфикс', blank=True)
    created = models.DateTimeField(auto_now_add=True, verbose_name='Дата создания')
    updated = models.DateTimeField(auto_now=True, verbose_name='Дата изменения')


class ProductFeature(models.Model):
    features = models.ForeignKey(Feature, on_delete=models.SET_NULL, null=True)
    value = models.CharField(max_length=100, verbose_name='Значение', blank=True)
    value_integer = models.IntegerField(verbose_name='Числовое значение', null=True, blank=True, default=0)