Django Admin 自定义按钮不工作

0 投票
2 回答
1157 浏览
提问于 2025-04-18 03:58

我在使用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>

撰写回答