Django Ajax 选择添加按钮
我安装了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
你需要注意以下几点:
- 你的
Admin
类必须从AjaxSelectAdmin
继承 - 你也可以把
AjaxSelectAdmin
当作一个混合类来用(也就是多重继承) - 你可以在你的
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