django - django admin如何在使用自定义操作按钮时添加上下文?
问题描述
我的管理面板中的每条记录都有一个自定义操作按钮“添加帖子”。我想保存在上下文中以将其用作表单obj.id
中的默认值admin:channels_post_add
class ChannelAdmin(admin.ModelAdmin):
list_display = ['title','username', 'invite_link', 'account_actions']
def account_actions(self, obj):
!!!! I WANT TO ADD CONTEXT HERE!!!!
return format_html('<a class="button" href="{}">Add post</a>', reverse('admin:channels_post_add'))
account_actions.short_description = 'Actions'
account_actions.allow_tags = True
class Meta:
model = Channel
admin.site.register(Channel, ChannelAdmin)
class PostAdmin(admin.ModelAdmin):
list_display = ['text', 'media', 'send_type', 'created']
class Meta:
model = Post
def get_form(self, request, obj=None, **kwargs):
form = super(PostAdmin, self).get_form(request, obj, **kwargs)
try:
post_id = !!! AND USE IT HERE!!!!
form.base_fields['channels'].initial = post_id
except Exception as e:
print(e)
return form
解决方案
您可以将 GET 参数添加到 url。
url = "%s?pid=%s" % (reverse(admin:channels_post_add), obj.id)
然后request.GET.get("pid")
在get_form()
:
class ChannelAdmin(admin.ModelAdmin):
...
def account_actions(self, obj):
url = "%s?pid=%s" % (reverse(admin:channels_post_add), obj.id)
return format_html('<a class="button" href="{}">Add post</a>', url)
class PostAdmin(admin.ModelAdmin):
...
def get_form(self, request, obj=None, **kwargs):
form = super(PostAdmin, self).get_form(request, obj, **kwargs)
try:
form.base_fields['channels'].initial = request.GET.get("pid")
except Exception as e:
print(e)
return form
我认为您必须使用ModelAdmin.get_changeform_initial_data(request)
(Django Docs)来设置初始值。
管理员更改表单上初始数据的挂钩。默认情况下,字段从GET参数中获得初始值。例如, ?name=initial_value会将name字段的初始值设置为 initial_value。
此方法应返回{'fieldname': 'fieldval'}形式的字典:
url = "%s?channels=%s" % (reverse(admin:channels_post_add), obj.id)
或者
def get_changeform_initial_data(self, request):
return {'channels': request.GET.get("pid")}
推荐阅读
- facebook-graph-api - API Graph Instagram:获取媒体评论返回错误:400 请求的资源不存在
- python - 我们如何在 Caffe 库中找到 Python 层日志消息?
- java - 画布不会呈现不透明
- java - ADF:如何删除设置为视图标准的值
- javascript - 如果它不存在则打开窗口,如果它存在于Javascript中则最大化
- google-sheets - 一张图表中的三个 Google 表格的数据图表(饼图)
- iphone - 构建一个使用 React Native 创建的 iPhone 应用程序
- axon - 如何在 Saga 中测试具有内部状态的方法
- git - Git克隆和修改开源作为子目录并与master保持更新
- elasticsearch - 从 Elasticsearch 获取不同的字段