Джанго ArrayField с разными типами
Мне нужно настроить django.contrib.postgres.fields.ArrayField
со списком пар, в которых первый элемент представляет собой число с плавающей запятой, а второй - небольшое положительное целое число:
data = [[1.23, 3], [2.42, 1], [3.72, 29]]
Как я мог это сделать? Является ли это возможным? Я попробовал что-то вроде этого, но не сработало:
class MyModel(models.Model):
my_field = ArrayField(
models.FloatField(default=0),
models.PositiveSmallIntegerField(default=0),
null=True
)
3 ответа
Я просто хочу знать, могу ли я использовать различные типы полей внутри ArrayField.
Нет, это невозможно, это может привести к очень запутанному способу извлечения данных из базы данных, а также к невозможности установить конкретный тип поля в базе данных.
Вместо этого просто используйте два поля с плавающей запятой
my_field = ArrayField(
ArrayField(
models.FloatField(default=0),
size=2,
)
)
Если вам действительно нужна эта функция, вы можете попробовать JSONField:
class MyModel(models.Model):
my_field =JSONField()
И хранить '[[1.23, 3], [2.42, 1], [3.72, 29]]'
хотя это вызывает вопросы о структуре вашей модели данных.
Вы можете попробовать это:
from django.contrib.postgres.fields import ArrayField
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=1024)
books_list = ArrayField(
models.CharField(max_length=1024)
)