Python 修订控制模型的好方法?-德扬戈

Python 修订控制模型的好方法?-德扬戈,python,sql,django,version-control,django-models,Python,Sql,Django,Version Control,Django Models,以下是我的尝试: 示例#1 示例2 我觉得两者都有点不确定,尤其是内容类型,我认为这应该是一个有利的选择 对于content_type one,模型中没有关于不同类型的修订控制字段的知识,如果我想要不同类型的字段呢 因为第一个一对多并不符合逻辑,因为它是一对多关系 有什么建议或想法吗?:)我想你忘了标题中的字段。=)我想我会使用一种保持原始模型不变的方法。首先是: class DjangoPony(models.Model): name = models.TextField()

以下是我的尝试:

示例#1 示例2
我觉得两者都有点不确定,尤其是内容类型,我认为这应该是一个有利的选择

  • 对于content_type one,模型中没有关于不同类型的修订控制字段的知识,如果我想要不同类型的字段呢

  • 因为第一个一对多并不符合逻辑,因为它是一对多关系



有什么建议或想法吗?:)我想你忘了标题中的字段。=)我想我会使用一种保持原始模型不变的方法。首先是:

class DjangoPony(models.Model):
    name = models.TextField()
    color = models.TextField()

class RevisionControlledValue(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    created_by = models.ForeignKey(User)
    value = models.TextField()
    field = models.CharField(max_length=20)

    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey('content_type', 'object_id')
这假设您将只对文本字段使用它。为了让它看起来更漂亮,你可以创建一个新的字段,比如说
ReversionTextField
,当模型保存时,它会自动创建reversion对象。

有一个应用程序。如果您真的只想在一个字段上拥有反转控制,请将其拆分到自己的表中,并建立一对一的关系。

@Jason

您不需要创建新模型。。。从恢复文档中:

保存字段的子集 如果只希望将字段的子集保存到修订,可以为register方法指定字段参数

reversion.register(YourModel, fields=["pk", "foo", "bar"])

回归已经过很好的测试,低级api可以让你做我想做的事情。

我想你已经调查过了?@dgel:我只想修改单个字段,而不是整个模型。此外,我还想阅读其他人的意见:)我想看看其他人采取的方法:
class DjangoPony(models.Model):
    name = models.TextField()
    color = models.TextField()

class RevisionControlledValue(models.Model):
    created = models.DateTimeField(auto_now_add=True)
    created_by = models.ForeignKey(User)
    value = models.TextField()
    field = models.CharField(max_length=20)

    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = generic.GenericForeignKey('content_type', 'object_id')
reversion.register(YourModel, fields=["pk", "foo", "bar"])