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)

Пожалуйста, дайте мне знать, если у вас есть идеи, как это можно сделать?

Если вы ищете способ создания динамической модели, вы можете рассмотреть эти предложения.

  1. HStoreField using django-hstore : https://django-hstore.readthedocs.io/en/latest/
  2. .
  3. JSONField: JSONField похож на HStoreField, и может лучше работать с большими словарями. Он также поддерживает типы, отличные от строк, такие как целые числа, булевы и вложенные словари.https://django-pgfields.readthedocs.io/en/latest/fields.html#json-field
  4. .

Или вы можете использовать NoSQL базу данных (Django MangoDB или другую адаптацию)

Вернуться на верх