Tôi có một mô hình:Django Query sử dụng .order_by() và .latest()
class MyModel(models.Model):
creation_date = models.DateTimeField(auto_now_add = True, editable=False)
class Meta:
get_latest_by = 'creation_date'
Tôi đã có một truy vấn trong quan điểm của tôi rằng đã làm như sau:
instances = MyModel.objects.all().order_by('creation_date')
Và sau đó tôi muốn instances.latest()
, nhưng nó sẽ không cho tôi ví dụ chính xác, trên thực tế nó đã cho tôi ví dụ đầu tiên. Chỉ khi tôi đặt order_by thành -creation_date
hoặc thực sự đã xóa order_by khỏi truy vấn đã làm .latest()
cho tôi ví dụ chính xác. Điều này cũng xảy ra khi tôi kiểm tra điều này bằng tay bằng cách sử dụng shell python manage.py thay vì trong khung nhìn.
Vì vậy, những gì tôi đã làm bây giờ là trong mô hình của Meta tôi đã liệt kê order_by = ['creation_date']
và không được sử dụng trong truy vấn, và hoạt động.
Tôi đã mong đợi .latest()
để luôn trả lại phiên bản gần đây nhất dựa trên trường (ngày) (thời gian). Bất cứ ai có thể cho tôi biết liệu chính xác là .latest()
có hoạt động lạ khi bạn sử dụng order_by
trong truy vấn không?
Cảm ơn bạn rất nhiều vì lời giải thích tuyệt vời của bạn! Bạn đã làm cho nó rất rõ ràng với tôi cách .latest() hoạt động và những gì tôi đã làm sai. Đặc biệt là thủ thuật SQL rất hữu ích. Điều đó chắc chắn sẽ có ích trong tương lai. – Heyl1
Điều gì sẽ xảy ra nếu tôi chỉ muốn có 1 giá trị cột được chèn gần đây nhất? Giả sử: chọn "app_mymodel". "Id" FROM "app_mymodel" ORDER BY "app_mymodel". "Creation_date" ASC LIMIT 1, mã python tương đương là gì? –