Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

356
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda