Me preguntaba si es posible almacenar una matriz en un modelo Django.
Estoy preguntando esto porque necesito almacenar una matriz de int (por ejemplo, [1,2,3]) en un campo y luego poder buscar una matriz específica y obtener una coincidencia con ella o por sus posibles combinaciones.
Estaba pensando en almacenar esas matrices como cadenas en CharField s y luego, cuando necesito buscar algo, concatenar los valores (obtenidos al filtrar otro modelo) con '[', ']' y ',' y luego usar un filtro de objetos con esa cadena generada. El problema es que tendré que generar cada combinación posible y luego filtrarlas una por una hasta que me salga una coincidencia, y creo que esto puede ser ineficiente.
Entonces, espero que me puedan dar otras ideas que podría probar.
No estoy pidiendo código, necesariamente, cualquier idea sobre cómo lograr esto será buena.
Sí, puedes usarlo así:
from django.contrib.postgres.fields import ArrayField class Board(models.Model): pieces = ArrayField(ArrayField(models.IntegerField()))Sin embargo, solo puede estar disponible cuando se usa PostgreSQL para la base de datos.
Te daría dos consejos:
1) Use ArrayField si está usando PostgreSQL como su base de datos. Puede leer más sobre ArrayField aquí .
2) Codifique su matriz como JSON y guárdela como una cadena simple o usando un JSONField como se encuentra aquí .
Personalmente, preferiría la opción número 1, ya que es la forma más limpia y agradable, pero dependiendo de lo que realmente esté usando para almacenar sus datos, es posible que no esté disponible para usted.
Si no está utilizando Postgres, le recomiendo el validate_comma_separated_integer_list de lista de números enteros separados por comas de Django.
Lo usas como validador en un CharField() .
No sé por qué nadie lo ha sugerido, pero siempre puedes encurtir las cosas y poner el resultado en un campo binario.
Las ventajas de este método son que funcionará con casi cualquier base de datos, es eficiente y se puede aplicar a más que solo arreglos. La desventaja es que no puede hacer que la base de datos ejecute consultas en los datos encurtidos (no fácilmente, de todos modos).
puede almacenar un json y listo con subconjuntos de ese JSON:
if (data != "attachmentto") { formData.append(data, this.recipe[data]) console.log('rec data ', data)} else if (data == "attachmentto") { console.log('rec data434 ', this.recipe.attachmentto) var myObj = { name: this.recipe.attachmentto.name, age: 31, city: "New York" }; let kokos = JSON.stringify(myObj); // this.recipe.attachmentto.name = this.recipe.attachmentto.name formData.append('attachmentto', kokos) }back-end de Django:
class Video(models.Model): objects = models.Manager() title = models.CharField(max_length=80) description = models.TextField(max_length=300) picture = JSONField(encoder=None) price = models.IntegerField(default=0) url = models.URLField() category = models.CharField(max_length=50) subcategory = models.TextField(max_length=50) attachmentto = JSONField(encoder=None) # attachmentto2 = models.JSONField() user = models.ForeignKey(User, on_delete=models.CASCADE, default=1)y resultado en la API de back-end:
{ "id": 174, "title": "ads", "description": "ads", "picture": { "name": "https://v3.vuejs.org/logo.png" }, "price": 0, "user": 1, "rating_average": 0, "attachmentto": { "age": 31, "city": "New York", "name": [ "https://restdj.herokuapp.com/media/uploads/ftf_3_cJ0V7TF.png", "https://restdj.herokuapp.com/media/uploads/ftf_3.jpg" ] } },Yo lo llamo muy bien (muy bien). Observe que enviamos un JSON y tenemos una matriz en ese JSON
Kokos es el JSON completo desaprobado para djangoo:
var myObj = { name: this.recipe.attachmentto.name, age: 31, city: "New York" }; let kokos = JSON.stringify(myObj);formData.append('adjunto a', kokos)
Encima; nombre: this.recipe.attachmentto.name es una matriz
Aquí está la matriz: "nombre": [
"https://restdj.herokuapp.com/media/uploads/ftf_3_cJ0V7TF.png", "https://restdj.herokuapp.com/media/uploads/ftf_3.jpg" ]