Django-select2 бросает "Результаты не могут быть загружены".

Я пытаюсь развернуть свое приложение django на виртуальной машине Droplet (DigitalOcean), следуя этому руководству.

Для этого я с успехом использовал nginx и gunicorn.

Проблема, с которой я сталкиваюсь, связана с django-select2 и заключается в том, что виджет формы всегда показывает "Результаты не могут быть найдены". выдает ошибку 404, в то время как в моем локальном окружении это работает безупречно!

Я пытался реализовать кеш (надеясь, что это решит проблему), но дела обстоят хуже, так как с включенным кешем виджет больше не работает даже в локальном режиме.

Теперь настало время показать мой код:

settings.py:

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
    },
    'select2': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
        'TIMEOUT': 60 * 60 * 24,
    },
}

SELECT2_CACHE_BACKEND = 'select2'

Это код, выполненный в соответствии с указанным здесь руководством.

PS: обратите внимание, что использование redis вместо memcached дает тот же результат

это моя конфигурация nginx:

server {
    listen 80;
    server_name 46.101.134.225;
    client_max_body_size 2M;

    location = /favicon.ico { access_log off; log_not_found off; }
    location /static {
        root /projectname;
    }

    location /media {
        root /projectname/staticfiles;
    }

    location /assets {
        root /;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/projectname/projectname.sock;
    }
}

это моя конфигурация gunicorn:

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=root
Group=www-data
WorkingDirectory=/projectname
ExecStart=/projectname/bin/gunicorn --access-logfile - --workers 3 --bind unix:/projectname/projectname.sock projectname.wsgi:application

[Install]
WantedBy=multi-user.target

это моя форма с виджетами:

from django_select2.forms import ModelSelect2Widget, ModelSelect2MultipleWidget
...
class CompanyForm(BaseModeratedObjectForm):
    ...
    city = forms.ModelChoiceField(widget=ModelSelect2Widget(
        model=City, search_fields=['name__istartswith']
    ), queryset=City.objects.all(), required=False)
    ...
    treatments = forms.ModelMultipleChoiceField(widget=ModelSelect2MultipleWidget(
        model=Treatment, search_fields=['name__icontains']
    ), queryset=Treatment.objects.all(), required=False)
    ...

PS: обратите внимание, что перед реализацией кеша я получил следующие результаты:

  • Отлично работает в моей местной среде.
  • Иногда работаю в производственной среде (иногда данные появляются при наборе текста).

После реализации кеша ничего больше не работает (в моей локальной среде, вручную переходя по URL select2, я вижу, что он отображает ошибку field_id not found

РЕДАКТИРОВАТЬ:

Поскольку мой ответ был принят даже в репозитории django-select2 на github, я сделал запрос на изменение проекта, изменив документацию, чтобы обратить внимание на этот случай!

3 ответа

Решение

Мне наконец удалось решить эту проблему, проблема заключалась в том, что при реализации кэша Redis система не смогла найти сервер Redis. Установка с помощью sudo apt-get install redis-server решил проблему, наряду с использованием кэша Redis!

Добавление комментария для всех, кто борется с этим. Похоже, это вызвано проблемами в вашем кеше. Убедитесь, что вы не используете кеш locmem в рабочей среде или фиктивный кеш. Я решил это, перейдя в кеш базы данных:

      CACHES = {
'default': {
        'BACKEND': 'django.core.cache.backends.locmem.LocMemCache',
    },
'select2': {
    'BACKEND': 'django.core.cache.backends.db.DatabaseCache',
    'LOCATION': 'select2_cache_table',
    }
}
SELECT2_CACHE_BACKEND: str = 'select2'

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

Также установлен redis, но решением может быть параметр TIMEOUT в settings.py. Хотя не уверен

Другие вопросы по тегам