Версии модели Django с 2 копиями данных - PullRequest
0 голосов
/ 31 августа 2018

У нас есть полнофункциональное приложение django, основанное на django-rest-framework. Исходные данные, необходимые для этого приложения, были предоставлены нам в Excel и были импортированы с помощью команд django. С тех пор он был изменен и использован конечным пользователем.

Теперь у нас есть новое требование по предоставлению API интеграции, который будет использоваться для постепенной отправки нам обновлений из Центра основных данных. Эти данные необходимо хранить отдельно от данных текущего приложения до момента времени, когда пользователь решит обновить свою копию данных из основных данных или отклонить ее.

Итак, мой вопрос: каков наилучший из возможных способов реализации этого?

В настоящее время я разработал простой POST API, который будет принимать плоские структуры данных для каждой модели и сохранять их отдельно. Например

class AppCustomer(models.Model):  #initial App Model in use
   name = models.CharField(max_length=10)
   title = models.CharField(max_lentgh=10)
   ....
   ....

class APICustomer(models.Model):  #new copy of AppCustomer Model
   name = models.CharField(max_length=10)
   title = models.CharField(max_lentgh=10)
   ....
   ....


class APICustomerUpdateView(views.APIView):
  permission_classes = (IsAuthenticated,)
  parser_classes = (CustomerJSONParser,)

  def post(self, request, format=None): 
    logger.info("Request Data %s", request.data)
    customer, _ = models.APICustomer.objects.get_or_create(name=request.data.get('name'))
    customer.title = request.data.get('title')
    .....
    .....
    customer.save()
    return Response(status=204)

В какой-то момент времени, когда пользователь выбирает, он может обновить данные модели AppCustomer с помощью данных модели APICustomer.

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

  1. Сохраняйте 2 копии каждого поля модели, и оба будут легко доступны в любой момент времени.
  2. Разрешить обновления от мастера к текущему в RestFul Manner
  3. Также разрешить возврат к старым данным на всякий случай.

Я смотрел на django-reversion и django-simple-history, но не уверен, можно ли их использовать для моего сценария. Похоже, они хранят версии одних и тех же данных, но мне нужны два источника правды.

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