django-reversion 恢复管理员外的多对多字段

标签 django manytomanyfield m2m django-reversion

我在我的项目中使用 django-reversion。 它工作得很好,除了一件事: 我无法获得以前版本的 ManyToMany 字段。但是在 django admin 中它是有效的,而不是在我的代码中。 要获取以前的版本,我使用以下代码:

vprod = Version.objects.get_for_date(product, ondate).get_object_version().object

除了 m2m 字段外,它也可以工作 其中 'product' 是 Product 类的对象,

class Product(models.Model):
    name = models.CharField(max_length=255)
    elements = models.ManyToManyField(Sku)

class Sku(models.Model):
    name = models.CharField(max_length=255, verbose_name="SKU Name")

我可以获得 vprod.name 并返回我需要的内容,但是当我尝试 vprod.elements.all() 时,它仅返回当前(最后一个)列表版本,即使元素的数量发生了变化。

最佳答案

如果我理解正确的话,我认为你应该得到版本的revision;版本包含对象的数据,修订包含多个对象的版本。看看:

some_version.revision.version_set.all()

具体来说,我认为你应该使用(未经测试):

[ v for v in Version.objects.get_for_date(product, ondate).revision.version_set.all() if version.content_type == ContentType.objects.get_for_model(Sku) ]

注意,顺便说一句,reversions 应该知道它应该遵循关系。使用 low level API :

reversion.register(YourModel, follow=["your_foreign_key_field"])

关于django-reversion 恢复管理员外的多对多字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6546536/

相关文章:

python - MySQL 1045 异常

python - 注销响应时未设置 session Cookie HTTPOnly 标志(Django)

python - 带参数的 Django ManyToManyField 过滤器?

python - Django 两个多域一关联表

Django:保存后访问ManyToManyField对象

Django 信号 m2m_changed 未触发

Django,在 self 类内的多对多关系中,我如何在ORM方面相互引用?

python - 我在哪里可以访问 Django Rest Framework 中的请求参数?

python - 使用模型继承并遇到不可为空的字段错误

来自manytomanyfield中间表的django数据