gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:36:37 25 4
gpt4 key购买 nike

我在我的项目中使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com