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

303
Visualizações
How to set the default of a JSONField to empty list in Django and django-jsonfield?

Question

What is the best way to set a JSONField to have the default value of a new list in django?

Context

There is a model where one of the fields is a list of items. In the case where there are no items set, the model should have an empty list.

Current solution

from django.models import Model

class MyModel(Model):
    the_list_field = JSONField(default=[])

Is this the best way to do it? Should it be switched to use list instead?

Thanks!

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

According to the Django documentation for JSONField you should indeed use default=list because using default=[] would create a mutable object that is shared between all instances of your field and could lead to some objects not having an empty list as a default.

Please note that this does not only apply for django.contrib.postgres.fields.JSONField but for all other kinds of objects and functions in Python in general.

Quote from the docs:

If you give the field a default, ensure it’s a callable such as list (for an empty default) or a callable that returns a list (such as a function). Incorrectly using default=[] creates a mutable default that is shared between all instances of

over 4 years ago · Santiago Trujillo Relatório

0

list and dict are callable, while [] and {} are not (you can't do []()). So:

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

If you want to instantiate with some data you can do the following:

def jsonfield_default_value():  # This is a callable
    return [0, 0]  # Any serializable Python obj, e.g. `["A", "B"]` or `{"price": 0}`

class MyModel(Model):
    the_list_field = JSONField(default=jsonfield_default_value)
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