将新部分插入Django Admin UserChangeForm

时间:2018-03-13 14:05:39

标签: python django django-forms

我正在使用此代码在UserChangeForm的末尾添加一个部分。

from django.contrib import admin
from django.contrib.auth.models import User
from django.contrib.auth.admin import UserAdmin
from apps.auth_app.models import UserProfile


class ProfileInline(admin.StackedInline):
    model = UserProfile
    can_delete = False
    verbose_name_plural = 'Profile'


class ProfileAdmin(UserAdmin):
    inlines = [ ProfileInline, ]

admin.site.unregister(User)
admin.site.register(User, ProfileAdmin)

我宁愿在“个人信息”之后插入该部分代码,但一直无法找到只使用字段集执行此操作的方法。我找到了这样的例子,但是有没有办法在没有子类化所有Django Admin用户表单的情况下做到这一点?

class UserAdmin(auth_admin.UserAdmin):
    fieldsets = (
        (None, {'fields': ('email', 'password')}),
        ('Personal info', {'fields': ('first_name', 'last_name')}),
        ('<<Custom Fields>>', {'fields': (<<Field Names>>)}),
        ('Permissions', {'fields': ('is_active', 'is_staff', 'is_superuser',
                                   'groups', 'user_permissions')}),
        ('Important dates', {'fields': ('last_login', 'date_joined')}),
    )
    ...
    form = UserChangeForm

1 个答案:

答案 0 :(得分:0)

在reddit的帮助下找到了我的问题的答案

https://www.reddit.com/r/django/comments/85qao1/move_userprofile_fields_in_admin_user_change_form/

这就是我最终的目标。

admin.py

from django.contrib import admin
from django.contrib.auth.models import User
from django.contrib.auth.admin import UserAdmin
from apps.auth_app.models import UserProfile


class ProfileInline(admin.StackedInline):
    model = UserProfile
    can_delete = False
    verbose_name_plural = 'Profile'


class ProfileAdmin(UserAdmin):
    inlines = [ ProfileInline, ]
    change_form_template = 'admin/change_form.html'


admin.site.unregister(User)
admin.site.register(User, ProfileAdmin)

模板/管理/ change_form.html

{% extends "admin/change_form.html" %}
{% load i18n admin_urls static admin_modify %}
{% block field_sets %}
    {% for fieldset in adminform %}
        {% include "admin/includes/fieldset.html" %}
        {% if fieldset.name == "Personal info" %}
            {% for inline_admin_formset in inline_admin_formsets %}
                {% include inline_admin_formset.opts.template %}
            {% endfor %}
        {% endif %}
    {% endfor %}
{% endblock %}

{% block inline_field_sets %}
    {#  blank inline block #}
{% endblock %}