Как проверить разницу в двух случаях в одной модели в Django - PullRequest
0 голосов
/ 31 октября 2019

Предположим, я запрограммировал "Задание" для обработки ввода и выдачи вывода. Он генерирует много разных объектов и хранится в разных таблицах базы данных (12 ~ 20 моделей)

Мне нужно преобразовать выходные данные двух заданий, у пользователей могут быть некоторые изменения во входных данных, что приводит к изменению выходных данных.

Мне нужно выяснить, какие экземпляры изменяются в моделях.

Я попытался добавить метод compare () к каждой модели и использовать имя для индексации экземпляра в двухРабота. (Найдено => Сравнить)

class ModelA(models.Model):
   job_id = models.IntegerField()
   name = models.CharField(max_length=31)
   content1 = models.CharField(max_length=128)
   content2 = models.CharField(max_length=128)
   content2 = models.CharField(max_length=128)

   def compare(self, comp)
      excluded = "id", "job_id"
      d1, d2 = self.__dict__, comp.__dict__
      for k, v in d1.items():
          if k in excluded:
             continue
          if v != d2[k]:
              return False
      return True

Большинство моделей, имеющих индекс взаимного имени, могут работать, я могу использовать это имя, чтобы найти общий экземпляр в двух заданиях, а затем вызвать функцию сравнения () для проверкиразница.

Однако в некоторых моделях имя не очень подходит для индексации двух экземпляров, поскольку имя больше похоже на порядок. Таким образом, имя экземпляра может измениться, если в процесс задания будут добавлены новые экземпляры.

пример.

job1: [ins1, ins2, ins3]
job2: [ins1, newIns2, ins2, ins3]

=> Содержимое обоих ins2 одинаковое, но имя изменилось из-за добавления n2.

Мне нужно перечислить newIns2, ins2 и ins3.

Затем я придумаю вычислить контрольную сумму каждого экземпляра в соответствии с cotent1, content2 и content3.

Создайте два {checksum: object} словарей для проверки целостности.

Является ли контрольная сумма хорошим решением для моего сценария?

Если да, нужно ли создавать поле контрольной суммы для хранения для каждой модели?

Как исключить ключ для вычисления контрольной суммы? (pk, job_id или name в некоторых моделях.)

...