具有2个数据副本的Django模型版本控制

时间:2018-08-31 04:51:00

标签: django postgresql django-models django-rest-framework

我们有一个基于django-rest-framework的功能齐全的django应用程序。 此应用程序所需的初始数据已通过Excel提供给我们,并使用django命令导入。从那以后,它已被最终用户修改和使用。

我们现在对提供集成API提出了新的要求,该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)

在某个时间点,用户选择时,他可以使用API​​Customer Model数据更新AppCustomer Model数据。

显然,这只是一个示例,实际系统中大约有30多个模型,因此我必须复制几乎每个模型以保留主数据的副本。应该有一个更好的方法来实现这一点,而不是保留每个模型的副本?那么有没有更好的方法

  1. 每个模型字段维护2个副本,并且在所有时间点都可以轻松访问。
  2. 以RestFul方式允许从主服务器到当前服务器的更新
  3. 还允许恢复到旧数据,以防万一。

我已经看过django-reversion和django-simple-history,但是不确定是否可以将它们用于我的场景。看起来它们存储了相同数据的版本,但是我需要两个事实来源。

0 个答案:

没有答案