Có thể làm mới trạng thái của một đối tượng django từ cơ sở dữ liệu? Ý tôi là hành vi gần tương đương với:
new_self = self.__class__.objects.get(pk=self.pk)
for each field of the record:
setattr(self, field, getattr(new_self, field))
CẬP NHẬT: Đã tìm thấy một cuộc chiến mở lại / wontfix trong trình theo dõi: http://code.djangoproject.com/ticket/901 . Vẫn không hiểu tại sao những người bảo trì không thích điều này.
Đây dường như là một chức năng không cần thiết; có thể chỉ cần tra cứu lại đối tượng từ cơ sở dữ liệu.
—
Stephan
Nó không thích hợp vì các đối tượng mô hình Django là proxy. Nếu bạn nhận được cùng một hàng của bảng thành hai đối tượng - x1 = X.objects.get (id = 1); x2 = X.objects.get (id = 1), họ sẽ kiểm tra như nhau nhưng chúng là các đối tượng khác nhau và trạng thái không được chia sẻ. Bạn có thể thay đổi cả hai độc lập và lưu chúng - lần lưu cuối cùng xác định trạng thái của hàng trong cơ sở dữ liệu. Do đó, chính xác là tải lại với phép gán đơn giản - x1 = X.objects.get (id = 1). Có một phương thức tải lại sẽ dẫn đến nhiều người suy luận sai rằng x1.f = 'giá trị mới'; (x1.f == x2.f) là Đúng.
—
Paul Whipp
commmit
. Khi bạn đã thực hiện điều đó, bạn sẽ phải chờ giao dịch SQL tiếp theo để thực hiện. Tại sao làm điều đó? Bao lâu bạn sẽ chờ đợi cho giao dịch tiếp theo?