Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

105
Views
Agregar un SearchVectorField a un modelo en Django

Así que estoy tratando de agregar un SearchVectorField a un modelo en Django:

 class JobPosting(models.Model): ... ... search_vector = SearchVectorField()

Entiendo que debe ser nullable o tener un valor predeterminado para poder migrar, así que eliminé todas las entradas de la tabla para evitar este problema.

Sin embargo, recibo el siguiente error cuando makemigrations :

 You are trying to add a non-`nullable` field 'search_vector' to jobposting without a default; we can't do that (the database needs something to populate existing rows). Please select a fix: 1) Provide a one-off default now (will be set on all existing rows with a null value for this column) 2) Quit, and let me add a default in models.py Select an option:

¿Por qué dice esto si la mesa está vacía? No quiero que la columna sea anulable y prefiero no tener un valor predeterminado si puedo evitarlo.

Mi pregunta es, ¿hay alguna forma de forzar makemigrations y migrate ya que no entiendo el problema si la tabla está vacía? Tengo otras tablas con datos que no quiero eliminar, por lo que no puedo eliminar toda la información de la base de datos.

Alternativamente, si la opción 1) es la solución, ¿cómo formatearía un valor predeterminado para este tipo de campo? ¿Supongo que no es un campo de texto normal?

Gracias por cualquier ayuda.

about 4 years ago · Santiago Trujillo
2 answers
Answer question

0

No estoy completamente seguro de por qué no desea tener un valor predeterminado, pero lo asumiré como dado.

Mi pregunta es, ¿hay alguna forma de forzar las migraciones y migrar ya que no entiendo el problema si la tabla está vacía?

Su tabla de base de datos actual puede estar vacía, pero se supone que las migraciones se pueden repetir en otras instancias de base de datos. Por lo tanto, Django no puede asumir que lo mismo se aplica a cualquier otra base de datos.

Una solución podría ser definir una migración que crea el campo como anulable, indexa todas las entradas y luego lo actualiza para que no sea anulable.

 # -*- coding: utf-8 -*- from __future__ import unicode_literals from django.contrib.postgres.search import SearchVector, SearchVectorField from django.db import migrations def index_entries(apps, schema_editor): Entry = apps.get_model("mymodel", "Entry") Entry.objects.update(search_vector=SearchVector('body_text')) class Migration(migrations.Migration): dependencies = [ ('mymodel', '0001_initial'), ] operations = [ migrations.AddField( model_name='entry', name='search_vector', field=SearchVectorField(null=True), ), migrations.RunPython(index_entries), migrations.AlterField( model_name='entry', name='search_vector', field=SearchVectorField(null=False), ), ]
about 4 years ago · Santiago Trujillo Report

0

Simplemente haría que el campo sea anulable (y probablemente no editable, ya que no lo cambiará en la interfaz de administración ni a través de formularios):

 class JobPosting(models.Model): ... ... search_vector = SearchVectorField(null=True, editable=False)

Y no habrá problemas con la migración.

Más tarde, puede hacer que este campo no sea anulable, pero no hay una razón real para hacerlo porque de todos modos lo actualizará mediante programación.

about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!