Разглеждам предизвикателствата при преобразуването на кодова база от използване на корекция на машината за приложения в използвайки django-nonrel.
Едно от нещата, които се случват в тази кодова база няколко пъти, е итерация върху всички свойства на обект. Например компаратор, конструктор за копиране, __str__ еквивалент и т.н.
Опростен пример:
def compare_things(thing_a, thing_b):
'''Compare two things on properties not in Thing.COMPARE_IGNORE_PROPS'''
if type(thing_a) != type(thing_b): return "Internal error"
for prop in Thing.properties():
if prop not in Thing.COMPARE_IGNORE_PROPS:
attr_a = getattr(thing_a, prop)
attr_b = getattr(thing_b, prop)
if attr_a != attr_b:
return prop + ": " + str(attr_a) + " is not equal to " + str(attr_b)
return ''
Въпреки това функцията properties() е от google.appengine.ext.db.Model.
Ако искам да използвам django-nonrel, всички мои моделни обекти ще бъдат вместо това от django.db.models.Model.
Има ли еквивалентна функционалност в този клас?