Необходимо решить проблему задержки в 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.
- Автозаполнение не работает.
- Используется Django версии 4.2 .
- 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