Сравнение 2 модельных объектов - PullRequest
2 голосов
/ 08 сентября 2011

Существует ли простой способ сравнения с объектами, чтобы проверить различия в значениях свойств?Я хочу что-то вроде этого:

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' )

Ответы [ 2 ]

0 голосов
/ 08 сентября 2011

Попробуйте использовать наборы:

differences = set(me.__dict__) ^ set(cloned_me.__dict__)
if differences:
    self.response.out.write('These 2 objects have different property values')

Вы могли бы даже вывести атрибуты, которые отличались (они содержатся в новом наборе различий).

0 голосов
/ 08 сентября 2011

Для простейшего сценария вы можете сравнивать объекты поле за полем, например,

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"))

output:

username differ 'anurag' != 'uniyal'

Позже вы можете улучшить его, если вам нужно дополнительно сравнить внешние ключи и т.д.1007 *

и я думаю, вы знаете, что в вашем примере clone_me на самом деле не клон me, а me

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...