Trong django - có trường dấu thời gian mặc định cho tất cả các đối tượng không? Đó là, tôi có phải khai báo rõ ràng trường 'dấu thời gian' cho 'được tạo trên' trong Mô hình của tôi - hay có cách nào để lấy trường này một cách tự động?
Câu trả lời:
Theo mặc định, không có thứ nào như vậy, nhưng việc thêm một cái thì rất dễ dàng. Chỉ cần sử dụng auto_now_add
tham số trong DateTimeField
lớp:
created = models.DateTimeField(auto_now_add=True)
Bạn cũng có thể sử dụng auto_now
cho trường 'cập nhật trên'. Kiểm tra hành vi của auto_now
ở đây .
Đối với auto_now_add
đây .
Một mô hình có cả hai trường sẽ giống như sau:
class MyModel(models.Model):
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
Tự động nghe không giống như một cái gì đó django sẽ làm theo mặc định. Nó sẽ không bắt bạn phải yêu cầu dấu thời gian.
Tôi sẽ xây dựng một lớp cơ sở trừu tượng và kế thừa tất cả các mô hình từ nó nếu bạn không muốn quên về nhãn thời gian / tên trường, v.v.
class TimeStampedModel(models.Model):
created_on = models.DateTimeField(auto_now_add=True)
class Meta:
abstract = True
Có vẻ như không nhiều để nhập wherever.TimeStampedModel
thay vìdjango.db.models.Model
class MyFutureModels(TimeStampedModel):
....
created
và updated
. Đây là một cách tuyệt vời để làm điều đó một cách sạch sẽ.
Nếu bạn đang sử dụng django-extensions (là một ứng dụng tốt để thêm chức năng vào trình trợ giúp dòng lệnh django-admin.py), bạn có thể tải các trường mô hình này miễn phí bằng cách kế thừa từ TimeStampedModel của chúng hoặc sử dụng các trường TimeStamp tùy chỉnh của chúng
Bạn có thể thử django-extensions
nếu bạn muốn sử dụng mô hình trừu tượng dấu thời gian
from django_extensions.db.models import TimeStampedModel
class A(TimeStampedModel):
...
Nó có các mô hình trừu tượng khác. bạn cũng có thể sử dụng nó.
Tôi nghĩ tôi sẽ đi cùng
created = models.DateTimeField(auto_now_add=True)
updated = models.DateTimeField(auto_now=True)
Tôi cần một số giải thích rõ về việc sử dụng
class TimeStampedModel(models.Model):
created_on = models.DateTimeField(auto_now_add=True)
class Meta:
abstract = True
model_utils
cho Django đã chứa sẵnTimeStampedModel
, nhưng nếu bạn không cần bất kỳ thứ gì khác từ gói này, chỉ cần giữ nó thêm trọng lượng.