Django добавляет поле в модель на основе другой модели
У меня есть модель продукта:
class Product(models.Model):
name = models.CharField(verbose_name=_("Name"), max_length=120)
slug = AutoSlugField(populate_from="name", verbose_name=_("Slug"), always_update=False, unique=True)
Я хочу иметь отдельную модель ProductFields:
class ProductFields(models.Model):
field_name = models.CharField()
field_type = models.CharField()
field_verbose_name = models.CharField()
field_max_length = models.IntegerField()
filed_null = models.CharField()
field_blank = models.BooleanField()
field_default = models.CharField()
...
Идея заключается в том, что всякий раз, когда я добавляю новое поле ProductField, я хочу, чтобы модель продукта переносила это добавленное поле в свою базу данных.
Например:
ProductFields.objects.create(field_name='description', field_type='CharField', field_verbose_name='Description', field_max_length=255, filed_null=True, filed_blank=True)
Это должно преобразовать Product modal в:
class Product(models.Model):
name = models.CharField(verbose_name=_("Name"), max_length=120)
slug = AutoSlugField(populate_from="name", verbose_name=_("Slug"), always_update=False, unique=True)
description = models.CharField(verbose_name="Description", max_length= 255, null=True, blank=True)
Пожалуйста, дайте мне знать, если у вас есть идеи, как это можно сделать?
Если вы ищете способ создания динамической модели, вы можете рассмотреть эти предложения.
- HStoreField using django-hstore : https://django-hstore.readthedocs.io/en/latest/ .
- JSONField: JSONField похож на HStoreField, и может лучше работать с большими словарями. Он также поддерживает типы, отличные от строк, такие как целые числа, булевы и вложенные словари.https://django-pgfields.readthedocs.io/en/latest/fields.html#json-field .
Или вы можете использовать NoSQL базу данных (Django MangoDB или другую адаптацию)