Cho phép nói obj1
và obj2
là 2 trường hợp của mô hình MyModel
.
Để biết trường nào khác nhau trên hai trường hợp của mô hình Django, trước hết chúng ta lấy tất cả các trường của một mô hình và lưu nó trong một biến my_model_fields
.
my_model_fields = MyModel._meta.get_all_field_names() # gives me the list of all the model fields defined in it
Sau đó, chúng tôi áp dụng filter()
với lambda
để biết được các lĩnh vực khác nhau giữa chúng.
filter(lambda field: getattr(obj1,field,None)!=getattr(obj2,field,None), my_model_fields)
Chức năng filter()
sẽ trả về danh sách các trường mô hình khác nhau giữa hai trường hợp.
Nguồn
2015-07-28 17:16:31
Cảm ơn bạn đã phản hồi nhanh! Tôi đã thử: my_model_fields = self._meta.get_all_field_names() # cung cấp cho tôi danh sách tất cả các trường mô hình được xác định trong nó bộ lọc (trường lambda: getattr (tự, trường, Không)! = Getattr (orig, field, None) , my_model_fields) ... Được gọi trong phương thức lưu của một cá thể, nhưng tôi nhận được: Tên Tên tự toàn cầu không được định nghĩa ... Bất kỳ đề xuất nào? – gabn88
Nevermind! Nếu tôi thay đổi_fields = filter (trường lambda: getattr (obj1, field, None)! = Getattr (obj2, field, None), my_model_fields) Tôi lấy lại các trường đã thay đổi! – gabn88
Có lẽ tôi nên làm điều này trong một câu hỏi tiếp theo, nhưng làm cách nào tôi có thể làm: cho trường trong changed_fields: qs = MyModel.objects.filter (something = something), qs.update (*** FIELD *** = F (trường)), cách thực hiện *** FIELD **? – gabn88