Chỉ cần phân biệt trường hợp 'ảnh chụp nhanh' với trường thể hiện mô hình hiện tại theo trường, bạn có thể nhận được snapshot
thông qua copy.copy(obj)
hoặc model_cls.objects.get(pk=obj.pk)
.
Ngoài ra bạn chỉ có thể so sánh các phiên bản đổ:
from django.core.serializers.json import Serializer
dump = Serializer.serialize([obj])
...
changed = dump == Serializer.serialize([obj])
Thông thường, tinh chỉnh mã của bạn là đơn giản nhất:
obj = Model.objects.get(pk=2342) # 'obj' is better than 'model', IMO
changed = False
if foo:
...
obj.foo = 'bar'
changed = True
if bar:
...
obj.bar = 'baz'
changed = True
if changed:
obj.save()
+1. Để lại kiểm tra đó để Django trừ khi bạn có lý do rất hấp dẫn để làm như vậy. –
Tôi không nghĩ vậy. Bạn có thể cung cấp một số bằng chứng? Hoặc có bạn trộn nó lên w/'has_changed' kiểm tra các hình thức Django? – okm
Tôi cũng không nghĩ vậy. Bạn có thể hiển thị trên dòng nào kiểm tra này được xử lý [ở đây] (https://code.djangoproject.com/browser/django/trunk/django/db/models/base.py#L467)? – DrTyrsa