Как использовать массивы в моделях Django? - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть модель ShortURL, которая содержит некоторые данные.

Я хочу собирать метаданные при каждом перенаправлении (ip, time, et c), поэтому мне нужно добавить ArrayField (который будет содержать словари ) какой-то Не нашел ничего такого в документах, что мне делать?

models.py:

class ShortUrl(models.Model):
    full_url = models.URLField()
    time_created = models.DateTimeField(auto_now=True)

    # visits = {}
    # Field will contain many dictionaries like {'ip': '...', 'time': '...', 'meta': ...}

1 Ответ

0 голосов
/ 09 апреля 2020

Поскольку Django поддерживает только реляционные базы данных, поэтому вы не нашли такого рода полей для хранения. Существует ArrayField поддержка PostgresSQL базы данных, которую я бы не советовал работает только с PostgresSQL. Более подробная информация о ArrayField: здесь .

Таким образом, предлагаемый подход нормализует отношение. Вы можете разделить метаданные для другой таблицы, которая будет иметь отношение ForeignKey к таблице ShortURL.

class Metadata(models.Model):
    short_url = models.ForeignKey(ShortURL, ...)
    ip = ...
    time = ...
    ...

Так что теперь каждый ваш элемент Array будет представлен строкой Metadata.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...