No django - existe um campo de carimbo de data / hora padrão para todos os objetos? Ou seja, eu tenho que declarar explicitamente um campo 'timestamp' para 'criado em' no meu modelo - ou há uma maneira de fazer isso de forma automática?
Respostas:
Não existe tal coisa por padrão, mas adicionar um é super fácil. Basta usar o auto_now_add
parâmetro na DateTimeField
classe:
created = models.DateTimeField(auto_now_add=True)
Você também pode usar auto_now
para um campo 'atualizado em'. Verifique o comportamento auto_now
daqui .
Por auto_now_add
aqui .
Um modelo com ambos os campos terá a seguinte aparência:
class MyModel(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
Automagicamente não soa como algo que django faria por padrão. Não forçaria você a exigir um carimbo de data / hora.
Eu construiria uma classe base abstrata e herdaria todos os modelos dela se você não quiser se esquecer do timestamp / fieldname, etc.
class TimeStampedModel(models.Model):
created_on = models.DateTimeField(auto_now_add=True)
class Meta:
abstract = True
Não parece muito para importar em wherever.TimeStampedModel
vez dedjango.db.models.Model
class MyFutureModels(TimeStampedModel):
....
created
e updated
. Esta é uma ótima maneira de fazer isso de forma limpa.
Se você estiver usando extensões django (que é um bom aplicativo para adicionar funcionalidade ao auxiliar de linha de comando django-admin.py), você pode obter esses campos de modelo gratuitamente herdando de seu TimeStampedModel ou usando seus campos de TimeStamp personalizados
Você pode tentar extensões django
se você quiser usar um modelo abstrato de carimbo de data / hora
from django_extensions.db.models import TimeStampedModel
class A(TimeStampedModel):
...
Possui outros modelos abstratos. você pode usar isso também.
Acho que iria com
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
Eu preciso de alguns esclarecimentos sobre como usar
class TimeStampedModel(models.Model):
created_on = models.DateTimeField(auto_now_add=True)
class Meta:
abstract = True
model_utils
para Django que já contémTimeStampedModel
, mas se você não precisa de mais nada deste pacote, apenas mantenha-o sem peso extra.