0

抱歉,如果我的问题有点宽泛,甚至在搜索我需要的东西时遇到问题。

本质上,我在 django 管理员中有一个英雄图像,但我需要创建一个自定义表单,允许在图像上放置点(如地图,但不是地图)。

我完全不知道如何在管理框架的范围内做到这一点。我相信我的问题(种类)类似于: jquery how to add pin to image and save the position to SQL

但特别是关于 django 管理员集成。

编辑:

我很可能会使用http://pictip.greenmandarine.net/http://duncanheron.github.io/dropPin/

所以,真的,我的问题是如何强制 Django 管理员显示主图像并允许用户单击点并将这些点保存到数据库中。注意:我不是第一次使用 django 用户,所以我得到了 ORM,这更多的是如何使用自定义表单来搞乱 django 管理员来做到这一点......

4

1 回答 1

2

添加自定义 JS + 表单

meta Media您可以使用表单类或将任意脚本注入管理员ModelAdmin.Media

https://docs.djangoproject.com/en/dev/ref/contrib/admin/

您可以构建自定义表单以接受任意信息 ( this_field_doesn't_actually_exist = forms.CharField)。

您可以ModelAdmin通过将方法名称添加到任何接受表单字段的参数中来添加方法,然后将该方法名称添加到readonly_fields

例如

readonly_fields = ('foo', )
fields = ('foo',)
def foo(self, obj):
    return "Arbtrary HTML"
foo.allow_tags = True

现在你有

  • 一个 HTML 图像
  • 任意 javascript
  • 传递给python的任意表单字段

添加自定义小部件

正如评论者所建议的那样,您可以构建知道如何呈现自身的小部件或自定义模型字段(包括添加额外媒体、显示输入、解析返回值以及在模型字段的情况下转换值以进行存储),但是如果您需要多个输入,我发现它相对复杂。

如果您想构建将在许多地方重复使用的东西,请研究此方法。

您还可以覆盖每个模型的管理模板

您还可以覆盖每个模型的一些模板。这可能是一种更简洁的方法,具体取决于您要进行多少自定义。

就个人而言,我会做 JS + readonly_field 直到我真的需要自定义表单。

https://docs.djangoproject.com/en/dev/ref/contrib/admin/#overriding-admin-templates

您还可以为每个模型管理员指定自定义路径:

ModelAdmin.add_form_template 自定义模板的路径,由 add_view() 使用。

ModelAdmin.change_form_template 自定义模板的路径,由 change_view() 使用。

ModelAdmin.change_list_template 自定义模板的路径,由 changelist_view() 使用。

ModelAdmin.delete_confirmation_template 自定义模板的路径,delete_view() 使用该模板在删除一个或多个对象时显示确认页面。

ModelAdmin.delete_selected_confirmation_template 自定义模板的路径,delete_selected 操作方法使用该模板在删除一个或多个对象时显示确认页面。请参阅操作文档。

ModelAdmin.object_history_template 自定义模板的路径,由 history_view() 使用。

您还可以完全覆盖管理视图

管理视图只是一个 django 视图。您可以通过覆盖以下方法从渲染到上下文完全覆盖它:

ModelAdmin.add_view(self, request, form_url='', extra_context=None) 模型实例添加页面的 Django 视图。请参阅下面的注释。

ModelAdmin.change_view(self, request, object_id, form_url='', extra_context=None) 模型实例版本页面的 Django 视图。请参阅下面的注释。

ModelAdmin.changelist_view(self, request, extra_context=None) 模型实例更改列表/操作页面的 Django 视图。请参阅下面的注释。

ModelAdmin.delete_view(self, request, object_id, extra_context=None) 模型实例删除确认页面的 Django 视图。请参阅下面的注释。

ModelAdmin.history_view(self, request, object_id, extra_context=None)

于 2013-10-04T17:12:03.100 回答