Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

360
Vistas
SearchVectorField: referencia unida no permitida para el campo taggit

La definición de mi modelo es la siguiente (un modelo simplificado del que se usa en el producto real. Hay un par de otros campos:

 from django.db import models from taggit.managers import TaggableManager from django.contrib.postgres.search import SearchVectorField from django.contrib.postgres.indexes import GinIndex class Product(models.Model): tags = TaggableManager() search_vector = SearchVectorField(null=True) class Meta: indexes = [ GinIndex(fields=['search_vector']) ]

Ejecuto hacer migraciones y migrar comandos. Estos funcionan correctamente.

Luego ejecuto el siguiente conjunto de comandos para construir el índice:

 search_vector = SearchVector('tags__name') Product.objects.all().update(search_vector=search_vector)

Termino recibiendo el siguiente error:

django.core.exceptions.FieldError: Joined field references are not permitted in this query

Esto es claramente causado por el campo tags__name , pero no estoy seguro de cómo resolverlo.

¿Puede alguien explicarme qué tendría que hacer para ejecutar los comandos anteriores correctamente?

¡Gracias!

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

No se puede hacer de esta manera.

Un enfoque posible es escribir activadores personalizados utilizando una migración hecha a sí misma. Los disparadores buscarían en la tag la tabla y actualizarían el índice search_vector en cada acción de estos:

  • INSERTAR en product ,
  • INSERTAR en tag ,
  • ACTUALIZAR tag ,
  • ELIMINAR de tag ,
  • Actualización de etiquetas de Product .

¿Parece un verdadero desastre? Así es. Aquí puedes ver a un chico que probó este enfoque.

Yo sugeriría una forma más directa. Puede agregar product.tags_for_search TextField , que se mantendría manualmente.

  • Rechacemos la eliminación de etiquetas. Se pueden marcar como DELETED , por lo que no sería necesario actualizar product.tags_for_search cuando se elimine una etiqueta.
  • Si necesitamos cambiar el nombre de una etiqueta y mantener todas las relaciones, solo podemos agregar una y copiar todas las relaciones.
  • Para insertar entradas de product , todo está bien, solo necesita establecer un valor de campo adecuado, lo mismo ocurre con la actualización de un conjunto de etiquetas.

Su objetivo parece bastante alcanzable para mí de esta manera.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda