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

301
Views
¿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 answers
Answer question

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 Report

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 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!