django - 如何在 django-admin 中添加自定义按钮

标签 django django-models django-forms django-views django-admin

我在 change_form 中有另一个提交按钮,如果单击此按钮,我想验证和自定义我请求的数据。

admin.py

 def save_model(self, request, obj, form, change):
    data = request.GET.copy()
    if '_saveandclose' in request.POST:
        data['CloseDetail'] = "Save and Closed Clicked!"


    obj.User = request.user
    obj.save()

最佳答案

出于文档目的,我创建了@Radishx 解决方案的更完整版本。这将在 QuestionAdmin 中添加一个发布按钮。

settings.py

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': ['backend/templates'],  # Search in backend app first to overwrite admin
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

backend/templates/admin/submit_line.html

{% load i18n admin_urls %}
<div class="submit-row">
{% block submit-row %}
{% if show_save %}<input type="submit" value="{% trans 'Save' %}" class="default" name="_save">{% endif %}
{% if show_delete_link %}
    {% url opts|admin_urlname:'delete' original.pk|admin_urlquote as delete_url %}
    <p class="deletelink-box"><a href="{% add_preserved_filters delete_url %}" class="deletelink">{% trans "Delete" %}</a></p>
{% endif %}
{% if show_save_as_new %}<input type="submit" value="{% trans 'Save as new' %}" name="_saveasnew">{% endif %}
{% if show_save_and_add_another %}<input type="submit" value="{% trans 'Save and add another' %}" name="_addanother">{% endif %}
{% if show_save_and_continue %}<input type="submit" value="{% if can_change %}{% trans 'Save and continue editing' %}{% else %}{% trans 'Save and view' %}{% endif %}" name="_continue">{% endif %}
{% if show_publish %}<input type="submit" value="{% trans 'Publish' %}" class="default" name="_publish">{% endif %}
{% if show_close %}<a href="{% url opts|admin_urlname:'changelist' %}" class="closelink">{% trans 'Close' %}</a>{% endif %}
{% endblock %}
</div>

注意 {% if show_publish %}

后端/admin.py

@admin.register(Question)
class QuestionAdmin(admin.ModelAdmin):
    def change_view(self, request, object_id, form_url='', extra_context=None):
        try:
            extra_context['show_publish'] = True
        except TypeError:
            extra_context = {'show_publish': True}
        return self.changeform_view(request, object_id, form_url, extra_context)

backend 更改为您的应用名称。 在此之后,您必须确保 Django 知道如何使用 _publish 按钮。

关于django - 如何在 django-admin 中添加自定义按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46522005/

相关文章:

python - Django 中的分组表单字段?

python - Django:用户登录系统与用户注册不在同一页面中工作

python - 使用 DRF 反向过滤 Django 模型

python - 如何修复尝试迁移manage.py时出现的错误

django - 唯一字段值和多对多关系

python - 如何使用 URL 正则表达式来匹配 Django 中帖子的确切日期?

django - python - Django内置登录 View 不重定向到下一个

python - Django 电话号码表单字段出现错误

python - 为什么当我过滤时 Django Rest Framework 在我的 URL 上添加斜杠?

django - 如何在 Django rest 框架中检索外键字段?