Поле модели 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.