hasattr(cls,field) will not work in all cases, for example where mixins are used. A safe test is:
try:
model._meta.get_field(field)
.. do stuff here
except FieldDoesNotExist:
pass
or
field = None
try:
field = model._meta.get_field(field)
except FieldDoesNotExist:
pass
if field:
.. do stuff here