Поле модели Django с переключаемым типом с помощью Djongo

Я хочу создать модель Django, в которой одно поле может хранить несколько различных типов данных. Например.

from djongo import models

class DataForms(models.Model):
    title = models.CharField(max_length=200)
    description = models.TextField(default=None)
    items = models.ManyToManyField(Item)

class Item(models.Model):
    NUMERIC = "NUM"
    TEXT = "TEXT"
    BOOLEAN = "BOOL"
    DATE = "DATE"

    name = models.CharField(max_length=200)
    description = models.TextField(default=None)
    ITEM_TYPE_CHOICES = (
        (NUMERIC, "Numeric value"), 
        (TEXT, "Text or Characters"),
        (BOOLEAN, "Yes or No"),
        (DATE, "Date and Time")
        )
    type = models.TextField(
        choices=ITEM_TYPE_CHOICES, default=TEXT
    value = ???????

Обратите внимание, что я использую djongo и MongoDB на бэкенде, поэтому хранение различных типов значений в одном документе не должно быть проблемой, верно?

В итоге пользователь должен иметь возможность выбрать тип элемента, который он хочет создать, а затем добавить его в форму данных. Поле value должно быть либо models.FloatField(), либо models.TextField() и так далее, в зависимости от выбора пользователя.

Я думал о создании различных типов классов, наследующих от класса Item, например:

class NumericItem(Item):    
value = models.FloatField()

А затем создавать экземпляры этих классов на основе выбора пользователя. Но мне кажется, что это ненужные накладные расходы. Я как бы теряю гибкость в хранении данных, которую обеспечивает djongo, если я делаю это. Есть ли более простой способ сделать это? Есть ли документация, которую я могу посмотреть?

Вы можете использовать JSONField с помощью pip install jsonfield.

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