Джанго 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)
   )
Другие вопросы по тегам