Django Admin 自定义按钮不工作
我在使用Django自定义用户模型时,有一个字段叫做license_key。为了方便使用,我想在管理界面上创建一个按钮,这个按钮可以为当前查看的用户生成一个新的license_key。下面是我按照Django文档的建议,重写的change_form.html文件。
/main/templates/admin/main/MyUser/change_form.html:
{% extends "admin/change_form.html" %}
{% load i18n admin_urls %}
{% block form_top %}
<form class="form-horizontal" method="POST" action="/auth/gen_new_aero_license/">
{% csrf_token %}
<div class="control-group">
<div class="controls controls-row">
<button type="submit" class="btn btn-primary">
Generate new license
</button>
</div>
</div>
</form>
{% endblock %}
这个表单会调用我在主视图文件中定义的一个函数...
main/views.py:
def auth_gen_new_aero_license(request):
u = MyUser.objects.get(username=request.user.username)
u.license_key = 'XXX'
u.save()
return redirect('/')
这里是我为这个新函数定义的urls.py,因为这可能会有帮助:
url(r'^auth/gen_new_aero_license/$', 'main.views.auth_gen_new_aero_license', name='auth_gen_new_aero_license'),
其实我并没有在views.py中调用生成新的动态license_key的脚本。我只是为了测试,把它设置成了一个随机值。
所以问题来了:当我点击这个按钮时,它只是刷新了当前用户的页面,所有的值都被清空了,导致出现错误。就好像它试图删除所有字段,然后保存这个用户,而这个用户现在变成了无效的。
我尝试调试,发现似乎根本没有进入我views.py文件中的那个函数。我也更新了urls.py,所以我在views.py中的函数应该是有效的。
我想知道我想做的事情是否可行?或者有没有更好的方法?又或者可能出错的地方在哪里。
如果你需要更多的解释,请随时问我!
谢谢
补充:现在用户页面上的所有内置管理按钮都无法使用了,比如 - 保存、保存并添加另一个、保存并继续编辑...
2 个回答
0
你有没有试过用 u = MyUser.objects.get(username__iexact=request.user)
这个方法呢?
1
你其实不需要用表单来完成你想做的事情。你可以用下面的代码来替代表单:
<a href="{% url "auth_gen_new_aero_license" %}" class="btn btn-primary">Generate new licence</a>