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

305
Vistas
¿Cómo establecer el valor predeterminado de un JSONField en una lista vacía en Django y django-jsonfield?

Pregunta

¿Cuál es la mejor manera de configurar un JSONField para que tenga el valor predeterminado de una nueva lista en django ?

Contexto

Hay un modelo en el que uno de los campos es una lista de elementos. En el caso de que no haya elementos establecidos, el modelo debe tener una lista vacía.

Solución actual

 from django.models import Model class MyModel(Model): the_list_field = JSONField(default=[])

¿Es esta la mejor manera de hacerlo? ¿Debería cambiarse a list de uso en su lugar?

¡Gracias!

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

0

De acuerdo con la documentación de Django para JSONField , debería usar default=list porque usar default=[] crearía un objeto mutable que se comparte entre todas las instancias de su campo y podría hacer que algunos objetos no tengan una lista vacía por defecto.

Tenga en cuenta que esto no solo se aplica a django.contrib.postgres.fields.JSONField sino a todos los demás tipos de objetos y funciones en Python en general .

Cita de los documentos:

Si le da al campo un valor predeterminado, asegúrese de que sea una lista invocable (para un valor predeterminado vacío) o una invocable que devuelva una lista (como una función). El uso incorrecto de default=[] crea un valor predeterminado mutable que se comparte entre todas las instancias de

over 4 years ago · Santiago Trujillo Denunciar

0

list y dict son invocables, mientras que [] y {} no lo son (no puede hacer []() ). Asi que:

  • Use JSONField(default=list) sobre JSONField(default=[])
  • Use JSONField(default=dict) sobre JSONField(default={})

Si desea crear una instancia con algunos datos, puede hacer lo siguiente:

 def jsonfield_default_value(): # This is a callable return [0, 0] # Any serializable Python obj, eg `["A", "B"]` or `{"price": 0}` class MyModel(Model): the_list_field = JSONField(default=jsonfield_default_value)
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