gpt4 book ai didi

显示已发布页面和草稿页面的页面上的 Django-CMS 外键

转载 作者:行者123 更新时间:2023-12-04 18:44:48 24 4
gpt4 key购买 nike

我最近从 Django-CMS 2.3.5 升级到 2.4.1。

以前我有一个这样的模型:

from django.db import models
from cms.models.pagemodel import Page

class MyModel(models.Model):
my_page = models.ForeignKey(Page)

在管理员中,这将允许我选择一个页面与 MyModel 关联。 .

现在我已经升级,并在我的所有页面上浏览并按下“发布草稿”,同一个管理页面在其选择框中显示每个页面的两个副本 - 一个已发布和一个草稿。

一些 further investigation发现 Teaser 插件在其定义中添加了以下内容来处理此问题:
    page_link = models.ForeignKey(Page,
limit_choices_to={'publisher_is_draft': True},
...)

同样,我曾经能够在我的 View 中查找页面 URL,如下所示:
Page.objects.get(reverse_id='update').get_absolute_url()

但现在我必须使用:
Page.objects.get(reverse_id='update', publisher_is_draft=False).get_absolute_url()

这似乎有点难看。

limit_choices_to以及 get 中的额外字段现在有必要吗?或者有没有更干净的方法来只查看已发布的页面? (例如,我注意到其他 cms 插件,例如链接、图片,使用没有 limit_choices_to 参数的外键。)

最佳答案

为了更好地处理 cms 页面的外键,您需要使用 PageField 而不是 ForeignKey

https://django-cms.readthedocs.org/en/2.4.3/extending_cms/fields.html

from django.db import models
from cms.models.fields import PageField

class MyModel(models.Model):
my_page = PageField()

当您想通过它的 reverse_id 获取页面的 url 时,您需要使用以下内容
Page.objects.public().get(reverse_id='update').get_absolute_url()

关于显示已发布页面和草稿页面的页面上的 Django-CMS 外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16764669/

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