2015-07-28 14 views

Trả lời

4

Cho phép nói obj1obj2 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.

+0

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

+0

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

+0

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

Các vấn đề liên quan