Необходимо решить проблему задержки в django для отношений M2M в выпадающем списке ModelAdmin

У меня есть группа почтовых ящиков, которые должны быть заполнены на основе логина клиента и доменов, которыми он владеет. Клиент:Пользователь - это отношения 1:1.

Пробовали:

views.py:

class MailboxAutocomplete(autocomplete.Select2QuerySetView):
    def get_queryset(self):
        if not self.request.user.is_authenticated:
            return Mailbox.objects.none()

        qs = Mailbox.objects.all()
        # Check if the user is in the 'customers' group
        if self.request.user.groups.filter(name='customers').exists():
            print('customer login in mailbox autocomplete view.......')
            # Filter based on the customer's email
            qs = qs.filter(domain__customer__email=self.request.user.email).only('email')

        elif self.request.user.groups.filter(name__in=['resellers']).exists():
            # Filter based on the reseller's email
            qs = qs.filter(domain__customer__reseller__email=self.request.user.email).only('email')

        if self.q:
            # Further filter based on user input (e.g., email matching)
            qs = qs.filter(email__icontains=self.q)
        print(qs.values('email'))
        return qs

в приложении urls.py: path('mailbox-autocomplete/', views.MailboxAutocomplete.as_view(), name='mailbox-autocomplete'), ]

в models.py:

class GroupMailIdsForm(forms.ModelForm):
    class Meta:
        model = GroupMailIds
        fields = "__all__"
    
    mailboxes = forms.ModelMultipleChoiceField(
        queryset=Mailbox.objects.none(),
        widget=autocomplete.ModelSelect2Multiple(url='mailmanager:mailbox-autocomplete')
    )

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        if self.instance.pk:  # Check if the instance is being updated
            if self.request.user.groups.filter(name='customers').exists():
                self.fields['mailboxes'].queryset = Mailbox.objects.filter(domain__customer__email=self.request.user.email)
            elif self.request.user.groups.filter(name='resellers').exists():
                self.fields['mailboxes'].queryset = Mailbox.objects.filter(domain__customer__reseller__email=self.request.user.email)

в файле admin.py:

class GroupMailIdsAdmin(ImportExportModelAdmin):
    resource_class = GroupMailIdsResource
    ordering = ('address',)
    filter_horizontal = ('mailboxes',)

и в settings.py:

INSTALLED_APPS = [
    'mailmanager.apps.MailmanagerConfig',
    'admin_confirm',
    'dal',
    'dal_select2',
    'django.contrib.admin',
    'jquery',
    ]
with other required django apps.
  1. Автозаполнение не работает.
  2. Используется Django версии 4.2
  3. .
  4. django-autocomplete-light==3.11.0

Есть ли что-то, что я упускаю. Я пытаюсь решить проблему задержки при загрузке около 200 тыс. почтовых ящиков в выпадающем списке. Могу ли я получить точный код для решения этой проблемы. Мне нужно отобразить выбранные почтовые ящики, а также сделать выбор легким. Я не очень хорошо разбираюсь в js. Также пробовал filter_horizontal, который очень хорошо отображает, но вызывает задержку из-за огромного количества почтовых ящиков

Вероятно, вы вообще не используете форму в ModelAdmin, вам следует внедрить .form [Django-doc] в админку:

class GroupMailIdsAdmin(ImportExportModelAdmin):
    resource_class = GroupMailIdsResource
    ordering = ('address',)
    filter_horizontal = ('mailboxes',)
    form = GroupMailIdsForm
Вернуться на верх