Django-select2 выдает «Результаты не могут быть загружены».

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

Для этой цели я успешно использовал nginx и gunicorn.

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

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

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

настройки.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;
    }
}

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

[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, я сделал запрос на перенос проекта, изменив документацию, чтобы обратить внимание на этот случай!


person Alessio Ferri    schedule 26.01.2018    source источник


Ответы (2)


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

person Alessio Ferri    schedule 29.01.2018
comment
Ваша конфигурация все еще указывает на Memcached, так что... Вы изменили ее на Redis? - person Alexei Martchenko; 27.06.2018
comment
Да, я изменил его на Redis, Redis не работал, потому что я не установил его, как в своем ответе. - person Alessio Ferri; 27.06.2018

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

person Emmanuel Chamilakis    schedule 27.01.2020