엔티티와 비교하여 속성 값 차이를 확인하는 쉬운 방법이 있습니까? 다음과 같은 것을 원합니다.두 모델 엔티티 비교
me = User.get_by_id(28)
cloned_me = me
cloned_me.first_name = 'Tom'
if me != cloned_me:
self.response.out.write('These 2 objects have different property values')
엔티티와 비교하여 속성 값 차이를 확인하는 쉬운 방법이 있습니까? 다음과 같은 것을 원합니다.두 모델 엔티티 비교
me = User.get_by_id(28)
cloned_me = me
cloned_me.first_name = 'Tom'
if me != cloned_me:
self.response.out.write('These 2 objects have different property values')
가장 간단한 시나리오는 필드별로 필드를 비교할 수 있습니다.
from django.contrib.auth.models import User
def compare(user1, user2):
for field in user1._meta.fields:
val1 = getattr(user1, field.name)
val2 = getattr(user2, field.name)
if val1 != val2:
print "%s differ '%s' != '%s'"%(field.name, val1, val2)
break
compare(User(username="anurag"), User(username="uniyal"))
출력 :
username differ 'anurag' != 'uniyal'
이 더 등 foerign 키
을 비교해야하는 경우 나중에 그것을 향상시킬 수 있습니다 그리고 난 당신이 당신의 예에서 clone_me
는 사실이 아니라고 알고 있습니다 생각 me
의 복제본입니다. me
그래서 나는 copy.copy를 사용할 것인가? 복제를위한 – zakdances
참조 http://stackoverflow.com/questions/4733609/how-do-i-clone-a-django-model-instance-object-and-save-it-to-the-database –
세트 사용 시도 :
differences = set(me.__dict__)^set(cloned_me.__dict__)
if differences:
self.response.out.write('These 2 objects have different property values')
다른 속성 (새로운 차이 세트에 포함됨)을 출력 할 수도 있습니다.
효율적인가? 비교 방법? 내 이해에서 비트 비교는 비쌉니다. – zakdances
나는 그것이 얼마나 비싸지 모르겠다. 당신이 매우 큰 데이터 세트를 가지고 있지 않다면 이것과 아마도 더 빠른 것 사이의 시차는 아마도 무시할 만하다. –
'cloned_me'은 여기에 복사되지 않습니다. 단지 동일한 객체에 대한 다른 참조 일뿐입니다. 이 검사는 항상 '참'을 반환합니다. –
가능한 복제본 [변경되지 않은 엔터티에 대한 .put() 방지 우아한 방법] (http://stackoverflow.com/questions/7330974/elegant-way-to-avoid-put-on-unchanged-entities) –