Добавление строк в существующую модель пользователя изменяет страницы администратора пользователя

У меня есть модель домена с полем пользователя «многие-ко-многим» к существующей модели пользователя. Я хочу, чтобы при добавлении или изменении пользователя на этих страницах администратора пользователя выбиралось поле Domain. Для этого я использовал admin.TabularInline. На прилагаемых изображениях показано, как изменилась страница добавления после добавления inlines в код. Минимальный набор полей расширился до полного набора полей, который Django использует, когда кто-то редактирует существующего пользователя, и наборы полей полностью перемешались по сравнению с исходной страницей без inlines. Оригинальная страница добавления пользователя Измененная страница добавления пользователя

Это фактический код, который я пробовал, и на картинке выше показан рабочий inlines с полем Domain, но я не хочу менять остальную часть страницы. Меня устраивает существующая модель пользователя Django и шаблоны, я не хочу создавать пользовательскую модель пользователя и шаблоны, если я могу этого избежать.

# model.py

from django.db import models
from django.contrib.auth.models import User
from django.utils.translation import gettext as _

class Domain(models.Model):
    domain = models.CharField(_('Domain name'), max_length=100)
    master_dns_server = models.CharField(_('Master DNS server'), max_length=100, blank=True, default='')
    updatekey_secret = models.CharField(_('Key'), max_length=255, blank=True, default='')
    updatekey_name = models.CharField(_('Key name'), max_length=50, blank=True, default='')
    updatekey_algorythm = models.CharField(_('Key algorythm'), max_length=50, blank=True, default='')
    last_transfer = models.DateTimeField(_('Last transfer'), blank=True, null=True, editable=False)
    user = models.ManyToManyField(User, verbose_name=_("Domain user"), through='Domain_User')

    class Meta:
        ordering = ['domain']

    def __str__(self):
        return self.domain

class Domain_User(models.Model):
    domain = models.ForeignKey(Domain, on_delete=models.CASCADE)
    user = models.ForeignKey(User, on_delete=models.CASCADE)

    class Meta:
        verbose_name = 'Domain user'

# admin.py

from django.contrib import admin
from .models import Domain
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth import get_user_model

class UserInline(admin.TabularInline):
    model = Domain.user.through
    verbose_name = 'Domain'
    extra = 0
    raw_id_fields = ['domain']

User = get_user_model()
admin.site.unregister(User)

class UserAdmin(admin.ModelAdmin):
    list_display = ['username', 'get_domains']
    inlines = [UserInline]

    def get_queryset(self, request):
        qs = super().get_queryset(request)
        return qs.prefetch_related('domain_set')

    @admin.display(description='domains')
    def get_domains(self, obj):
        return ", ".join([d.domain for d in obj.domain_set.all()])

admin.site.register(User, UserAdmin)

Как я могу использовать inlines в UserAdmin, сохраняя оригинальное содержимое страницы?

Вернуться на верх