Qualquer campo com o auto_nowconjunto de atributos também será herdado editable=Falsee, portanto, não será exibido no painel de administração. No passado, houve conversas sobre auto_nowcomo auto_now_adddesaparecer os argumentos e , embora eles ainda existam, acho melhor você usar apenas um método personalizadosave() .
Portanto, para fazer isso funcionar corretamente, eu recomendaria não usar auto_nowou, em auto_now_addvez disso, definir seu próprio save()método para garantir que createdsomente seja atualizado se idnão estiver definido (como quando o item é criado pela primeira vez) e que ele seja atualizado modifiedsempre que o item é salvo.
Fiz exatamente a mesma coisa com outros projetos que escrevi usando o Django, e assim você save()ficaria assim:
from django.utils import timezone
class User(models.Model):
created = models.DateTimeField(editable=False)
modified = models.DateTimeField()
def save(self, *args, **kwargs):
''' On save, update timestamps '''
if not self.id:
self.created = timezone.now()
self.modified = timezone.now()
return super(User, self).save(*args, **kwargs)
Espero que isto ajude!
Edite em resposta aos comentários:
A razão pela qual eu continuo sobrecarregando save()versus confiando nesses argumentos de campo é dupla:
- Os mencionados altos e baixos com sua confiabilidade. Esses argumentos são fortemente dependentes da maneira como cada tipo de banco de dados com o qual o Django sabe como interagir trata um campo de data / hora, e parece quebrar e / ou mudar entre cada versão. (Que acredito ser o ímpeto por trás da chamada para removê-los completamente).
- O fato de eles funcionarem apenas no DateField, DateTimeField e TimeField e, usando essa técnica, você pode preencher automaticamente qualquer tipo de campo toda vez que um item é salvo.
- Use
django.utils.timezone.now()vs. datetime.datetime.now(), pois retornará um datetime.datetimeobjeto sensível a TZ ou ingênuo, dependendo settings.USE_TZ.
Para resolver por que o OP viu o erro, não sei exatamente, mas parece que creatednem sequer estou sendo preenchido, apesar de ter auto_now_add=True. Para mim, isso se destaca como um bug e ressalta o item 1 da minha pequena lista acima: auto_nowe auto_now_addé, na melhor das hipóteses, esquisito.