【问题标题】:Wagtail: Add method to PageModel to get an inspect urlWagtail:向 PageModel 添加方法以获取检查 url
【发布时间】:2020-10-21 18:06:53
【问题描述】:

我正在尝试将动态而不是硬编码的 get_inspect_url 方法添加到 PageModel

class MyModel(Page):
    # ...
    # this is what I have now, which breaks in prod due to a different admin url
    def get_inspect_url(self):
        inspect_url = f"/admin/myapp/mymodel/inspect/{self.id}/"   
        return inspect_url

我知道您可以在wagtail_hooks.pyget admin urls for an object 中使用ModelAdmin.url_helper_class,但我想不出在模型级别上与类方法一样的方法。有什么办法吗?

【问题讨论】:

    标签: django wagtail


    【解决方案1】:

    感谢@Andrey Maslov 的提示,我找到了一种方法:

    from django.urls import reverse
    
        def get_inspect_url(self):
            return reverse(
                f"{self._meta.app_label}_{self._meta.model_name}_modeladmin_inspect",
                args=[self.id],
            )
    

    Wagtail admin url 的基本形式是:

    [app_label]_[model_name]_modeladmin_[action]
    

    只需将 [action] 更改为以下之一即可生成其他实例级别的管理 url:

    • edit
    • delete

    【讨论】:

      【解决方案2】:

      如果你有这样的 urls.py 行

      path(MyModel/view/<id:int>/', YourViewName, name='mymodel-info'),
      

      然后你可以添加到你的models.py这行

      from django.urls import reverse
      ...
      
      class MyModel(Page):
      
          def get_inspect_url(self):
              inspect_url = reverse('mymodel-info', kwargs={'id': self.id})
              return inspect_url
      

      【讨论】:

      • 我没有额外的 view 与我的模型相关联,因为 Wagtail 会处理这个问题。所以urls.py 中没有明显的 url 路径。但我只是想出了另一种方法:使用settings.WAGTAIL_ADMIN_URL 从我的设置中导入我的管理员基本网址并将其放入。
      • 那么这个答案可能对你有用https://stackoverflow.com/a/2930241/7186864/对reverse做同样的事情
      猜你喜欢
      • 2020-04-09
      • 1970-01-01
      • 2022-12-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-29
      • 1970-01-01
      相关资源
      最近更新 更多