如何在 Django Admin 中关闭弹出窗口
How to close popup in Django Admin
我正在使用 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 错误:
有人知道我该如何修复它以便自动关闭弹出窗口吗?我想它应该以某种方式与父管理页面通信?
这是您前端的问题。
我假设你的弹出窗口是一个 BS 模式,确保你已经做好了一切。模式应关闭而不会出现错误。
好像我只是错过了为每个弹出窗口添加唯一 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',)
我正在使用 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 错误:
有人知道我该如何修复它以便自动关闭弹出窗口吗?我想它应该以某种方式与父管理页面通信?
这是您前端的问题。 我假设你的弹出窗口是一个 BS 模式,确保你已经做好了一切。模式应关闭而不会出现错误。
好像我只是错过了为每个弹出窗口添加唯一 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',)