gpt4 book ai didi

django - 如何在 Django 管理中的字段旁边添加自定义按钮?

转载 作者:行者123 更新时间:2023-12-04 00:08:52 35 4
gpt4 key购买 nike

我有一个客户端模型,其中包含一个客户端 API key 字段。

在 Django Admin 中添加新客户端时,我希望在 API 字段旁边有一个按钮来生成新 key (我有这个方法)。该字段将在生成后使用 key 更新。

如何在字段旁边添加此按钮?我应该使用自定义小部件吗?

最佳答案

就我而言,我正在使用我创建的按钮进行 API 调用,因此我也会介绍我是如何做到的。当然你的按钮可以做任何你喜欢的事情。

首先,在您的模型中创建一个将输出您的按钮的函数。我将使用我的示例,即models.py:

class YourModel(models.Model):

....

def admin_unit_details(self): # Button for admin to get to API
return format_html(u'<a href="#" onclick="return false;" class="button" '
u'id="id_admin_unit_selected">Unit Details</a>')
admin_unit_details.allow_tags = True
admin_unit_details.short_description = "Unit Details"

然后我将该字段添加为只读并将其添加到字段集,请注意,您只能在模型管理员上定义字段或字段集。我还添加了媒体来覆盖一些 css,还添加了 js 用于进行 ajax 调用的位置,admin.py:
class YourModelAdmin(admin.ModelAdmin):

form = YourModelForm
list_display = ('id', 'agent', 'project', 'completed_date', 'selected_unit', 'is_accepted',
'get_lock_for_admin', 'status')

fields = ('agent', 'project', 'completed_date', 'selected_unit', 'is_accepted',
'lock', 'status')

readonly_fields = ('admin_unit_details', )

...

class Media:
js = ('admin_custom/js/myjs.js',) # in static
css = {'all': ('admin_custom/css/mycss.css', )}

我还想说明的是,我通过 Form 传递了 API 地址和 header ,但是您可以在代码中使用正确的 header /密码。我只是把我的全部放在一个地方(settings.py),forms.py(可选):
from settings import API_ADDRESS, API_HEADER
class MyModelForm(forms.ModelForm):

def __init__(self, *args, **kwargs):
super(WorksheetForm, self).__init__(*args, **kwargs)

self.fields['selected_unit'].widget = forms.Select(choices=get_worksheet_unit_choice_list(self.instance.id),
attrs={'api_address': API_ADDRESS, 'api_header': API_HEADER})

....

最后看一下我的 js,正如我的 admin Media 类所引用的,它在 admin_custom/js/myjs.js 中:

这类似于添加管理员图像,请参阅 here .还要在此 django doc 中搜索 allow_tags 属性,它显示了一个很好的例子。
// Make sure jQuery (django admin) is available, use admin jQuery instance
if (typeof jQuery === 'undefined') {
var jQuery = django.jQuery;
}

var unit_information = {};

jQuery( document ).ready(function() {

jQuery('#id_admin_unit_selected').click( function() {

//get the data from id_selected_unit, from the api_header api_address attributes
var unit_select = jQuery('#id_selected_unit');
var header = unit_select.attr('api_header');
var address = unit_select.attr('api_address');
var selected_unit = unit_select.val();

if (header && address && selected_unit){
var unit_address = address + '/units/' + selected_unit
get_unit(header, unit_address)
}
else{
// if can't connect to api, so hide
jQuery('.field-admin_unit_details').hide();
}

});

});


function get_unit(header, address){

jQuery.ajax
({
type: "GET",
url: address,
dataType: 'json',
headers: {
"Authorization": header
},
success: function (result) {
//TODO: output this in a modal & style
unit_information = JSON.stringify(result);
alert(unit_information)
},
error: function(xhr, textStatus, errorThrown) {
alert("Please report this error: "+errorThrown+xhr.status+xhr.responseText);
}
});

}

这会在警报中输出它,您也可以将其记录到控制台或为其定义自己的模式/样式。

希望这会有所帮助,干杯!

关于django - 如何在 Django 管理中的字段旁边添加自定义按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18229516/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com