O Django Wars foi idealizado e desenvolvido no Django 1.4. Algumas funcionalidades aqui descritas podem não funcionar ou funcionar de forma diferente em outras versões do Django
Vish!!!!
Fez o passo-a-passo do post anterior e o Django deu pau:
can’t subtract offset-naive and offset-aware datetimes
E agora???
O que acontece é o seguinte:
você está tentando fazer um cálculo entre dois objetos datetime.
A bronca é que um destes objetos tem o timezone setado e o outro não.
Assim, o Python não sabe como proceder e PAAAUUUUUU!!!!
No nosso caso, o arquivo settings.py tem a diretiva USE_TZ marcado como True.
Isso significa dizer que o Django, quando salva qualquer coisa relacionada com o tempo, como um campo DateTimefield, ao invés de usar a hora do servidor, está detectando o TIME ZONE do usuário e salvando a hora do computador do usuário.
No caso desse erro, a coisa mais fácil de se fazer é ir no arquivo settings.py e alterar a variável USE_TZ para False.
E ai, tudo vai funcionar beleza!
Onde está o código-fonte do projeto?
Não falo, RÁÁÁÁÁÁÁÁÁÁÁ!!!!!
Qual o que não tem timezone?
agora = datetime.datetime.now() ???
Se sim, não tem como passar o timezone como parâmetro pra função não?
Olha o que eu descobri como solução:
(caso para quem não tem setuptools como eu)
1- baixe a biblioteca pytz
http://sourceforge.net/projects/pytz/
2- instale a biblioteca usando o console:
python setup.py install
3- no modulo onde está a função refresh, importe pytz:
import pytz
4- mude o código para:
agora = datetime.datetime.now(pytz.utc)
Pronto! Com isso não precisa mudar o USE_TZ em settings para False. Não sei no que isso implica…
Essa é a segunda opção.
Como eu disse no post, eu escolhi a coisa mais fácil a se fazer, que era desligar o TimeZone do Django.
Também, desligar o TZ não impacta tanto no nosso projeto.
Só estamos utilizando o datetime para calcular o refresh do usuário.
Tanto faz se a hora que está no banco de dados é a hora do servidor ou a hora local do jogador, o que importa é que tenha uma hora lá que possamos utilizar para fazer comparação de tempo.
Essa sua opção funciona perfeitamente.
Fiquei pensando em implementá-la.
Decidi por não implementar só para prender o projeto nas bibliotecas Python e Django, sem precisar de bibliotecas externas.
Pode ser que depois do fim do projeto eu faça uns apêndices e coloque lá a sua dica 😀
No numero 4 é bom mudar para:
agora = datetime.datetime.now(pytz.timezone(‘America/Recife’))
O que está fazendo simplesmente é setar o timezone naquela data que antes não tinha ao invés de tirar o timezone da data que tem. 😀