【问题标题】:How to close popup in Django Admin如何在 Django Admin 中关闭弹出窗口
【发布时间】:2021-06-11 04:12:31
【问题描述】:

我将 Python 3.7.10 与 Django 3.1.6 一起使用,并且我使用以下代码创建了一个管理弹出窗口,当单击“edit_link”时将触发该弹出窗口:

class EditLinkWidget(forms.URLInput):
    def render(self, name, value, attrs, renderer):
        super().render(name, value, attrs, renderer)
        if not value:
            return ''

        return mark_safe(f'<a class="related-widget-wrapper-link change-related" href="{value}?_to_field=id&_popup=1" '\
                         'data-href-template="{}?_to_field=id&_popup=1">Edit</a>').format(
            re.sub("(\d+)", "__fk__", value))


class PageForm(TranslatableModelForm):
    edit_link = forms.CharField(widget=EditLinkWidget, required=False, disabled=True)

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        if self.instance.pk:
            self.fields['edit_link'].initial = f'/admin/cms/car/{self.instance.car_id}/change/')
    class Meta:
        model = User
        fields = ('edit_link',)

效果很好,但问题是当我点击保存按钮时弹出窗口没有自动关闭,引发以下javascript错误:

有人知道我该如何修复它以便自动关闭弹出窗口吗?我猜它应该以某种方式与父管理页面通信?

【问题讨论】:

    标签: django django-forms django-admin python-3.7


    【解决方案1】:

    好像我只是错过了为每个弹出窗口添加一个唯一的 ID。添加id="{name}" 后,一切都按预期工作。最终代码如下所示:

    class EditLinkWidget(forms.URLInput):
        def render(self, name, value, attrs, renderer):
            super().render(name, value, attrs, renderer)
            if not value:
                return ''
    
            return mark_safe(f'<a id="{name}" class="related-widget-wrapper-link change-related" href="{value}?_to_field=id&_popup=1" '\
                             'data-href-template="{}?_to_field=id&_popup=1">Edit</a>').format(
                re.sub("(\d+)", "__fk__", value))
    
    
    class PageForm(TranslatableModelForm):
        edit_link = forms.CharField(widget=EditLinkWidget, required=False, disabled=True)
    
        def __init__(self, *args, **kwargs):
            super().__init__(*args, **kwargs)
            if self.instance.pk:
                self.fields['edit_link'].initial = f'/admin/cms/car/{self.instance.car_id}/change/')
        class Meta:
            model = User
            fields = ('edit_link',)
    

    【讨论】:

      【解决方案2】:

      这是您前端的问题。 我假设您的弹出窗口是一个 BS 模式,请确保您已经做好了一切。模态应该关闭而不会出现错误。

      【讨论】:

        猜你喜欢
        • 2023-02-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多