it-swarm.com.de

Es ist möglich, ein Array im Django-Modell zu speichern.

Ich habe mich gefragt, ob es möglich ist, ein Array in einem Django-Modell zu speichern.

Ich frage das, weil ich ein Array von int (z. B. [1,2,3]) in einem Feld speichern muss und dann in der Lage sein muss, ein bestimmtes Array zu suchen und eine Übereinstimmung mit ihm oder mit seinen möglichen Kombinationen zu erhalten.

Ich dachte daran, diese Arrays als Zeichenfolgen in Zeichenfeldern zu speichern und dann, wenn ich etwas suchen muss, die durch Filtern eines anderen Modells erhaltenen Werte mit '[', ']' und ',' zu verknüpfen und dann einen Objektfilter mit zu verwenden die generierte Zeichenfolge. Das Problem ist, dass ich jede mögliche Kombination generieren muss und dann eine nach der anderen filtern muss, bis ich eine Übereinstimmung bekomme und ich glaube, dass dies ineffizient sein könnte.

Ich hoffe, Sie können mir noch andere Ideen geben, die ich versuchen könnte.

Ich frage nicht unbedingt nach Code, alle Ideen, wie dies zu erreichen ist, werden gut sein.

9
Elros Romeo

Ich hätte zwei Ratschläge für Sie:

1) Verwenden Sie ArrayField, wenn Sie PostgreSQL als Datenbank verwenden. Mehr über ArrayFieldhier erfahren Sie hier.

2) Kodieren Sie Ihr Array als JSON und speichern Sie es entweder als einfachen String oder mit einer JSONField wie gefunden hier .

Ich persönlich bevorzuge Option Nummer 1, da dies die sauberere und nettere Methode ist, aber abhängig davon, was Sie tatsächlich zum Speichern Ihrer Daten verwenden, die Ihnen möglicherweise nicht zur Verfügung stehen.

19
Tim Specht

Ja, du kannst es so benutzen:

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

Es kann jedoch nur verfügbar sein, wenn PostgreSQL für die Datenbank verwendet wird.

5
Exprator

Wenn Sie nicht Postgres verwenden, empfehle ich den validate_comma_separated_integer_list-Validator von Django.

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

Sie verwenden als Validator für eine CharField().

1
Chris Conlan