web-dev-qa-db-fra.com

Il est possible de stocker un tableau dans le modèle Django?

Je me demandais s'il était possible de stocker un tableau dans un modèle Django?

Je vous pose cette question car je dois stocker un tableau d'int (par exemple, [1,2,3]) dans un champ, puis être capable de rechercher un tableau spécifique et d'obtenir une correspondance avec ce dernier ou avec ses combinaisons possibles.

Je pensais stocker ces tableaux sous forme de chaînes dans des champs, puis, lorsque je devais effectuer une recherche, concaténer les valeurs (obtenues en filtrant un autre modèle) avec '[', ']' et ',', puis utiliser un filtre d'objet avec cette chaîne générée. Le problème est que je devrai générer chaque combinaison possible, puis filtrer une par une jusqu'à obtenir une correspondance et je pense que cela pourrait être inefficace.

J'espère donc que vous pourrez me donner d'autres idées que je pourrais essayer.

Je ne demande pas nécessairement au code, toute idée sur la façon de réaliser cela sera bonne.

9
Elros Romeo

J'aurais deux conseils pour vous:

1) Utilisez ArrayField si vous utilisez PostgreSQL comme base de données. Vous pouvez en savoir plus sur ArrayFieldici .

2) Encodez votre tableau au format JSON et stockez-le sous forme de chaîne simple ou en utilisant un JSONField tel que trouvé ici .

Personnellement, je préfère l’option n ° 1, car c’est la méthode la plus propre et la plus agréable, mais elle dépend de ce que vous utilisez réellement pour stocker vos données qui pourraient ne pas vous être accessibles.

19
Tim Specht

Oui, vous pouvez l'utiliser comme ceci:

from Django.contrib.postgres.fields import ArrayField
class Board(models.Model):
    pieces = ArrayField(ArrayField(models.IntegerField()))

Cependant, il ne peut être disponible que si vous utilisez PostgreSQL pour la base de données.

5
Exprator

Si vous n'utilisez pas Postgres, je recommande le validateur validate_comma_separated_integer_list de Django.

https://docs.djangoproject.com/en/dev/ref/validators/#Django.core.validators.validate_comma_separated_integer_list

Vous utilisez est en tant que validateur sur une CharField().

1
Chris Conlan