1
resposta

[Bug] Gravação de data do Django para o MongoDB

Tenho um projeto Django com banco de dados sincronizado com o mongoDB, nesse projeto tenho um model que possui um campo "models.DateTimeField(default= timezone.now, null=False, blank=False)" para guardar a data atual. Quando faço o envio pelo admin do django, ele mostra o horário corretamente, entretanto, quando checo para ver se os dados foram gravados corretamente no mongoDB aparece dessa forma: "2023-07-14T19:20:24.000+00:00", com +3 horas. Já mudei o campo de TIME_ZONE no settings.py e não sei o que preciso fazer, poderiam me ajudar?

1 resposta

Olá Felipe!

O problema que você está enfrentando está relacionado à forma como o Django e o MongoDB tratam o armazenamento de datas e fusos horários. Para resolver esse problema e garantir que as datas sejam armazenadas corretamente no MongoDB, siga as seguintes etapas:

  1. Certifique-se de que o TIME_ZONE está configurado corretamente: Verifique novamente o arquivo settings.py e certifique-se de que o TIME_ZONE esteja configurado para a zona de fuso horário correta em que você está localizado. Por exemplo, para o Brasil, o TIME_ZONE deve ser definido como "America/Sao_Paulo". Tenha certeza de reiniciar o servidor após fazer essa alteração.

  2. Utilize django.utils.timezone.now em vez de datetime.datetime.now: Em seu model, ao definir o campo de data e hora, use django.utils.timezone.now em vez de datetime.datetime.now. Isso garantirá que o Django armazene a data e hora com o fuso horário correto, conforme configurado em TIME_ZONE.

Por exemplo, em vez disso:

models.DateTimeField(default=datetime.datetime.now, null=False, blank=False)

Use:

from django.utils import timezone

models.DateTimeField(default=timezone.now, null=False, blank=False)
  1. Configurações de banco de dados do MongoDB: Verifique se as configurações do MongoDB estão corretas no arquivo settings.py. Você deve ter uma seção como esta:
DATABASES = {
    'default': {
        'ENGINE': 'djongo',
        'NAME': 'nome_do_banco_de_dados',
        'HOST': 'localhost',
        'PORT': 27017,
    }
}

Certifique-se de que o nome do banco de dados, o host e a porta estejam configurados corretamente de acordo com a configuração do seu ambiente.

  1. Verifique as datas no MongoDB: Ao verificar as datas armazenadas no MongoDB, lembre-se de que o MongoDB armazena as datas em formato UTC. Isso significa que, se você estiver consultando diretamente o banco de dados, as datas serão mostradas com o fuso horário UTC (+00:00). No entanto, quando o Django lê essas datas do MongoDB, ele deve convertê-las para o fuso horário configurado em TIME_ZONE.

Com essas etapas, as datas devem ser armazenadas corretamente no banco de dados MongoDB com o fuso horário apropriado. Se ainda estiver enfrentando problemas com o fuso horário, verifique também se a configuração de fuso horário do seu sistema operacional está correta.

Espero que isso ajude a resolver o problema. Se precisar de mais assistência ou tiver mais dúvidas, fique à vontade para perguntar!