Django Ajax 选择添加按钮

1 投票
2 回答
1138 浏览
提问于 2025-04-17 02:37

我安装了django-ajax-select这个应用,它是个很棒的工具,可以实现自动补全的功能。不过在我把表单添加到admin.py之后,那个可以添加新对象的(+)按钮就出现了问题,我附上了一张示例截图。

我找到了一段代码,可以通过重写clean方法来拆分输入的值,但在我的情况下,我只是想要那个添加按钮。

def clean(self, value):
if value:
    lookup = get_lookup(self.channel)
    objs = lookup.get_objects( [value] )
    if objs:
        return objs[0]
    else:
        firstname, surname = value.split(" ")
        gender = self.channel.split("_")[0]
        new_skater = Skater(name=firstname, surname=surname, gender=gender)
        return new_skater
else:
    if self.required:
        raise forms.ValidationError(self.error_messages['required'])
    return None

在这里输入图片描述

2 个回答

1

文档里显示的内容和被接受的答案完全一样。

https://github.com/crucialfelix/django-ajax-selects#example

你需要注意以下几点:

  1. 你的 Admin 类必须从 AjaxSelectAdmin 继承
  2. 你也可以把 AjaxSelectAdmin 当作一个混合类来用(也就是多重继承)
  3. 你可以在你的 get_form() 方法里插入 autoselect_fields_check_can_add

如果你只是为了其他目的实现 get_form,那么你只需要做第三种情况。其实直接从 AjaxSelectAdmin 继承会更好。

另外,如果你看到有添加(ADD)图标,但无法添加对象,可能是因为你没有权限。autoselect_fields_check_can_add 是用来检查你在 Django 管理后台的权限的。

1

最后我找到了问题的解决办法,因为文档里的写法是错的。

在admin.py文件中,你应该添加这段代码。在我的代码里,我的管理类叫做orderAdmin。

def get_form(self, request, obj=None, **kwargs):
    form = super(orderAdmin,self).get_form(request,obj,**kwargs)
    autoselect_fields_check_can_add(form,self.model,request.user)
    return form

撰写回答