django CMS 页面扩展数据重复
django CMS page extension data duplication
我有一个 Django CMS page extension:
class MyAppExtension(PageExtension):
show_in_catalog = models.BooleanField()
filters_to_show = models.ManyToManyField(Attribute)
extension_pool.register(MyAppExtension)
观看次数:
class MyListView(FilterView):
.....
def get_filterset_kwargs(self, filterset_class):
extension = MyAppExtension.objects.get(
extended_object=self.request.current_page)
attributes = extension.filters_to_show.all()
现在在每个页面中我都应该得到属性列表。但是在 Live 模式下,我得到一个空列表。当我切换到 Draft 模式时,我得到了预期的属性列表,就像它应该的那样。
经过一些混乱,我发现每个页面都有重复的 MyAppExtension.objects.all()
,每个页面都有一个空的 filters_to_show
列表。
此外,在 Live 模式下,当我调用 MyAppExtension.objects.get(extended_object=self.request.current_page)
时,它与我在 Draft[ 中调用时有不同的 pk
=39=]模式。所以我的问题:
- 这是怎么回事?
- 如何在 Live 模式下获取正确的对象?
- 为什么每个扩展都有一个重复的?
cms.Page
对象以已发布和草稿形式存在,并且草稿(连同与其关联的所有对象)在发布操作中被复制到其他版本。
您的 MyAppExtension.objects
具有 ManyToManyField
属性。这些也需要复制,否则发布的版本将失败 - 正如您所发现的 - 无法返回这些对象。
Page 扩展文档中的 Handling relations 解释了该做什么并给出了一个示例 - 简而言之,在 Page 扩展上提供一个 copy_relations()
方法,将它们复制到新实例。
如果没有这个方法,你会发现页面上的所有复制操作,不仅仅是发布,都无法复制对象。
也许你可以使用这样的东西:
class PageDataExtension(PageExtension):
category_page = models.ManyToManyField(category, blank=True)
def copy_relations(self, oldinstance, language):
self.category_page.clear()
for pcategory in oldinstance.category_page.all():
self.category_page.add(pcategory)
我有一个 Django CMS page extension:
class MyAppExtension(PageExtension):
show_in_catalog = models.BooleanField()
filters_to_show = models.ManyToManyField(Attribute)
extension_pool.register(MyAppExtension)
观看次数:
class MyListView(FilterView):
.....
def get_filterset_kwargs(self, filterset_class):
extension = MyAppExtension.objects.get(
extended_object=self.request.current_page)
attributes = extension.filters_to_show.all()
现在在每个页面中我都应该得到属性列表。但是在 Live 模式下,我得到一个空列表。当我切换到 Draft 模式时,我得到了预期的属性列表,就像它应该的那样。
经过一些混乱,我发现每个页面都有重复的 MyAppExtension.objects.all()
,每个页面都有一个空的 filters_to_show
列表。
此外,在 Live 模式下,当我调用 MyAppExtension.objects.get(extended_object=self.request.current_page)
时,它与我在 Draft[ 中调用时有不同的 pk
=39=]模式。所以我的问题:
- 这是怎么回事?
- 如何在 Live 模式下获取正确的对象?
- 为什么每个扩展都有一个重复的?
cms.Page
对象以已发布和草稿形式存在,并且草稿(连同与其关联的所有对象)在发布操作中被复制到其他版本。
您的 MyAppExtension.objects
具有 ManyToManyField
属性。这些也需要复制,否则发布的版本将失败 - 正如您所发现的 - 无法返回这些对象。
Handling relations 解释了该做什么并给出了一个示例 - 简而言之,在 Page 扩展上提供一个 copy_relations()
方法,将它们复制到新实例。
如果没有这个方法,你会发现页面上的所有复制操作,不仅仅是发布,都无法复制对象。
也许你可以使用这样的东西:
class PageDataExtension(PageExtension):
category_page = models.ManyToManyField(category, blank=True)
def copy_relations(self, oldinstance, language):
self.category_page.clear()
for pcategory in oldinstance.category_page.all():
self.category_page.add(pcategory)