Поскольку вы хотите фильтровать, вам понадобится какая-то поддержка БД для вашего поля, и поле json не будет столь полезным для вас. Вы можете использовать несколько разных решений с разными
уровни сложности в соответствии с вашими потребностями. Одним из предложений является сериализация ваших данных в строку. Пэд с достаточным количеством нулей для сортировки строк / целых чисел / чисел с плавающей точкой. Теперь вы можете отфильтровать все ваши вещи в виде строки (убедитесь, что вы добавили значение, по которому вы фильтруете). Добавьте столбец data_type для извлечения правого объекта python.
TYPES = [(int, 1), (Decimal, 2),(date, 3), (str, 4)]
class MyTag(models.Model):
name = models.CharField(max_length=50)
data_type = models.IntegetField(choices=TYPES)
value = models.CharField(max_length=100)
def set_the_value(self, value):
choices = dict(TYPES)
self.data_type = choices[type(value)]
if self.data_type == int:
self.value = "%010d" % value
# else... repeat for other data types
def get_the_value(self):
choices = dict([(y,x) for x,y in TYPES])
return choices[self.data_type](self.value)
(Отказ от ответственности: это взлом, но, вероятно, не самый плохой).