Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 及时冻结django模型对象,如快照_Sql_Django_Model_Instance_Revision - Fatal编程技术网

Sql 及时冻结django模型对象,如快照

Sql 及时冻结django模型对象,如快照,sql,django,model,instance,revision,Sql,Django,Model,Instance,Revision,假设我想跟踪从事项目的员工 2015年项目 -雇员A 员工A现在更换了医疗服务提供商, 地址和完成他的学士学位 2018年项目 -雇员A 对于2018项目,员工A的详细信息是最新的。但如果我看 回到project 2015,员工A详细信息现在比项目本身更新。例如,现在看起来员工A在2015项目工作时拥有学士学位,这是不正确的。 我需要的是一个实例,在将员工保存到项目中时,他被冻结在时间/时间胶囊/快照/副本中。同时仍然能够更新员工的“实时”版本 还有其他的模型,我会遇到同样的问题。这真的让我大吃

假设我想跟踪从事项目的员工

2015年项目
-雇员A

员工A现在更换了医疗服务提供商, 地址和完成他的学士学位

2018年项目
-雇员A

对于2018项目,员工A的详细信息是最新的。但如果我看 回到project 2015,员工A详细信息现在比项目本身更新。例如,现在看起来员工A在2015项目工作时拥有学士学位,这是不正确的。 我需要的是一个实例,在将员工保存到项目中时,他被冻结在时间/时间胶囊/快照/副本中。同时仍然能够更新员工的“实时”版本


还有其他的模型,我会遇到同样的问题。这真的让我大吃一惊,因为这对数据库思维来说太违反直觉了。是否有正确/正确的方法来处理此问题。可能有Django版本吗?解决方案谢谢大家!

django simple history项目非常有用,您可以获取对象的快照。

我也遇到了类似的挑战,我们通过执行一个模式来解决它,该模式将很难转化为以下领域:

class EmployeeProfile(Model):
    class Meta:
        abstract = True

    common_field1 = CharField()
    common_field2 = CharField()
    common_field3 = CharField()

    def get_employee_profile_data(self):
        return {
            'common_field1': self.common_field1,
            'common_field2': self.common_field2,
            'common_field3': self.common_field3,
        }


class Employee(EmployeeProfile):
    specific_fields


class ProjectProfile(EmployeeProfile):
    class Meta:
        unique_together = ('project', 'employee')

    project = ForeignKey(Project)
    owner = ForeignKey(Employee) # Means that the Employee "owns" this profile


# A factory function
def create_project_profile(employee, project):
    return ProjectProfile.objects.create(
        project=project,
        owner=employee,
        **employee.get_employee_profile_data())
我们试着在考虑问题的时候把注意力分开

我认为该模式满足以下条件:

  • 项目具有由员工拥有的特定于项目的配置文件

  • 员工每个项目只能有一个配置文件

  • 可以在不影响“实时数据”的情况下更改项目的特定配置文件

  • 可以在不影响任何项目的情况下更改员工档案实时数据
好处是,数据库迁移将同时影响员工和项目概要文件,并且将get_Employee_profile_数据置于unittest下应该很简单。 业主参考将确保很容易查询项目的参与者等


希望它能给你一些想法…

看起来你在寻找一种纪念图案