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_addparâmetro na DateTimeFieldclasse:
created = models.DateTimeField(auto_now_add=True)
Você também pode usar auto_nowpara 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.TimeStampedModelvez dedjango.db.models.Model
class MyFutureModels(TimeStampedModel):
....
createde 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_utilspara Django que já contémTimeStampedModel, mas se você não precisa de mais nada deste pacote, apenas mantenha-o sem peso extra.