Я добавляю хэш объекта модели Account в один столбец объекта Account.Я извлекаю данные из некоторой цели и создаю для этого объект Account. Перед сохранением объекта я вычисляю хеш объекта Account и присваиваю его полю hash_value.Затем я проверяю, присутствует ли хэш в Account против поля hash_value.Чтобы избежать ненужного обновления.Но каждый раз перед вставкой сгенерированный хеш отличается.Почему?
Я попытался сравнить каждое поле в объекте obj, полученном от target и Account account .. Они совпадают.
# Account model
class Account(models.Model):
uuid = models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True)
application_id = models.ForeignKey(Applications, related_name="account_application_id", on_delete=models.CASCADE)
employee_id = models.TextField(null=True)
username = models.TextField(null=True)
display_name = models.TextField(null=True)
mail = models.TextField(null=True)
department = models.TextField(null=True)
company = models.TextField(null=True)
description = models.TextField(null=True)
entitlements = models.TextField(null=True)
hash_value = models.BigIntegerField(null=True)
def __hash__(self):
hash_sum_value = hash(
(
# self.uuid, no two uuid can be same
str(self.application_id.uuid), # include only uuid of application in hash
str(self.employee_id),
str(self.username),
str(self.display_name),
str(self.mail),
str(self.department),
str(self.company),
str(self.description),
str(self.entitlements)
)
)
return hash_sum_value
# checking hash present to avoid unnecessary updation.
obj = Account()
# some code to add values in obj
if entity_type == 'account':
try:
obj.hash_value = hash(obj)
except TypeError:
logging.info("Account info " + str(obj))
logging.error("Unable to hash object: " + str(obj.username))
if Account.objects.filter(hash_value=obj.hash_value).exists():
# never comes here
logging.info("Hash matched for acc " + obj.username)
continue
Я ожидаю одинаковый хэш для объектов с одинаковыми данными.